Важная информация
RSS лента

rekby

Настройка шлюза IPv6 на Linux

Оценить эту запись
Исходное состояние:
1. Есть аккаунт на https://tunnelbroker.net
2. Чистый CentOS 6.5 с двумя интерфейсами: в локальную сеть и в публичный интернет с прямым (можно динамическим) IP-адресом.

Будет получено в итоге:
Шлюз из локальной сети в IPv6-интернет, на котором разрешены исходящие подключения и запрещены входящие (чтобы кто попало в локальную сеть не ломился). Маршрутизатор анонсирует себя в локальной сети и клиенты автоматически настраиваются на сеть без состояния.

НЕ будет рассматриваться:
настройка DNS для IPv6, в моем случае на шлюзе в локальной сети уже стоит bind, он отдает IPv6-адреса без доп. настроек.

Создание туннеля
На https://tunnelbroker.net слева нажать ссылку "Create Regular Tunnel”
Вписать текущий IP шлюзв в поле IPv4 Endpoint (Your side).
С сервера, который будет шлюзом попинговать каждый предложенный IP из списка "Available Tunnel Servers” и выбрать сервер с минимальным пингом. Туннель привязывается к этому серверу и весь трафик будет идти через него. Поменять этот сервер потом можно будет только путем создания нового туннеля.Нажать Create tunnel. Для целей статьи пусть это будет сервер 1.2.3.4

Подключение шлюза к туннелю
Если на шлюзе настроен firewall - разрешить для выбранного сервера пинг-запросы и трафик по протоколу 41. Для простоты - можно разрешить весь трафик с сервера-шлюза.
iptables -I INPUT -s 1.2.3.4 -j ACCEPT
service iptables save # Для сохранения настроек при перезагрузке

Создать скрипт tunnelbroker-ipv6 с содержимым:
Код :
#!/bin/bash
 
MODE="$1"
 
if [ -z "$MODE" ] || [ "$MODE" != "up" -a "$MODE" != "down" ]; then
    echo "Usage: $0 up|down"
    exit 1
fi
 
REMOTE_IP="1.2.3.4" # IP-адрес сервера со стороны tunnelbroker. Можно посмотреть на странице туннеля, поле "Server IPv4 Address".
DEV_NAME="ipv6-tunnel" # Адрес виртуального интерфейса для IPv6-трафика. На момент выполнения скрипта интерфейс с таким названием должен отсутствовать.
SERVER_NETWORK="2001:db8:27:1f::2/64" # Адрес на виртуальном интерфейсе и сеть для связи с сервером брокера. Поле "Client IPv6 Address"
HOME_NETWORK="2001:db8:28:1f::/64"    # Блок, выделенный для использования в локальной сети. Этот адрес ПОХОЖ на предыдущий, но ОТЛИЧАЕТСЯ, в моем случае отличался одной цифрой. поле "Routed /64:”
HOME_NETWORK_DEV="eth0" # Интерфейс, выходящий в локальную сеть
 
# Сделедующие поля нужны если у нашего шлюза динамический IP
TUNNELBROKER_LOGIN="login" # Логин с которым вы регистрировались на tunnelbroker
TUNNELBROKER_TUNNEL_ID="12345" # Идентификатор тунеля, поле "Tunnel ID"
TUNNELBROKER_UPDATEKEY="abcd" # Ключ обновления, используется вместо пароля. Можно посмотреть на странице информации о туннеле, вкладка advanced, поле "Update Key”.
 
if [ "$MODE" = "up" ]; then
    # Сообщаем брокеру текущий внешний адрес шлюза (адрес подставляется тот с которого был сделан запрос).
    wget "https://$TUNNELBROKER_LOGIN:$TUNNELBROKER_UPDATEKEY@ipv4.tunnelbroker.net/nic/update?hostname=$TUNNELBROKER_TUNNEL_ID" -O /dev/null
 
    modprobe ipv6 # Подгрузка модуля ядра. Обычно уже загружен.
    ip tunnel del $DEV_NAME 2> /dev/null # удаляется существующий интерфейс (например от прошлого запуска)
    ip tunnel add $DEV_NAME mode sit remote $REMOTE_IP # Создается интерфейс туннеля
    ip link set $DEV_NAME up # Включается интерфейс туннеля, с этого момента он виден в ifconfig
    ip addr add $SERVER_NETWORK dev $DEV_NAME # Назначается адрес для связи с сервером брокера
    ip route add ::/0 dev $DEV_NAME # Маршрут по умолчанию - чтобы весь IPv6 трафик для которого нет специальных маршрутов направлялся в этот виртуальный интерфейс.
 
    ip route del $HOME_NETWORK 2>/dev/null # Очистка предыдущего маршрута
    ip route add $HOME_NETWORK dev $HOME_NETWORK_DEV # Направляем трафик локальной сети на устройство, смотрящее в эту сеть.
elif [ "$MODE" = "down" ]; then
    ip tunnel del $DEV_NAME # Удаляется виртуальный интерфейс.
    ip route del $HOME_NETWORK 2>/dev/null # Удаляется маршрутизация блока в локальную сеть
fi

Этот скрипт можно запускать с параметрами up (включение шлюза) и down - выключение шлюза. Скрипт можно запускать много раз. У меня он настроен для автоматического вызова после подключения к интернету в /etc/ppp/ip-up.local
После запуска этого скрипта IPv6-сеть появится на самом шлюзе, можно проверить попинговав сам сайт брокера
ping6 tunnelbroker.net

Настройка маршрутизации трафика из/в локальную сеть
Код :
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # включение маршрутизации IPv6 трафика на всех интерфейсах
echo net.ipv6.conf.all.forwarding=1 >> /etc/sysctl.conf # сохранение маршрутизации при перезапусках сервера
ip6tables -F # ВНИМАНИЕ - ЭТА КОМАНДА УДАЛИТ ВСЕ ВАШИ ПРАВИЛА В ipv6tables если они были
ip6tables -I FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # Устранение эффекта когда половина картинок/страниц не загружаются.
ip6tables -P FORWARD DROP # Запрет прохождения IPv6-трафика, который не разрешен явно
ip6tables -A FORWARD -i eth0 -o ipv6-tunnel -j ACCEPT # Разрешаем весь исходящий трафик из локальной сети в глобальную. eth0 - интерфейс локальной сети, если у вас отличается - надо поставить свой.
ip6tables -A FORWARD -i ipv6-tunnel -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешение ответов на запросы сделанные из локальной сети.
service ip6tables save # Сохранение настроек в файл.
В этот момент если вручную настроить IPv6 на компьютерах локальной сети то он уже будет работать.

Автоматическая настройка клиентов
Код :
yum install radvd # Установка демона, рассылающего информацию об этом шлюзе в локальную сеть.

дальше надо поправить /etc/radvd.conf

Код :
interface eth0 # Указать интерфейс локальной сети
{
    AdvSendAdvert on; # Рассылать информацию что этот компьютер выступает шлюзом
    prefix 2001:db8:28:1f::/64 # Префикс домашней сети, из которого клиенты будут набирать себе адреса. Поле  "Routed /64”
    {
    };
};
Код :
service radvd start # запуск
chkconfig radvd on # включение в автозапуск

В этот момент IPv6 должен заработать в локальной сети для всех устройств которые поддерживают его автонастройку, можно проверять зайдя на сайт http://test-ipv6.com

Обновлено 30.05.2014 в 16:16 rekby

Метки: centos, ipv6, linux Добавить / редактировать метки
Категории
Без категории

Комментарии