В статье рассматривается пример настройки маршрутизатора для проброса IPv6 сети в локальную сеть и автонастройка клиентов.
Настройки должны подойти для любых linux-дистрибутивов, но могут отличаться нарпимер команды установки или названия пакетов. В статье примеры приведены для CentOS 6.5.
Шлюз из локальной сети в IPv6-интернет, на котором разрешены исходящие подключения и запрещены входящие (чтобы кто попало в локальную сеть не ломился). Маршрутизатор анонсирует себя в локальной сети и клиенты автоматически настраиваются на сеть без состояния.
настройка DNS для IPv6, в моем случае на шлюзе в локальной сети уже стоит bind, он отдает IPv6-адреса без доп. настроек.
Настройки должны подойти для любых linux-дистрибутивов, но могут отличаться нарпимер команды установки или названия пакетов. В статье примеры приведены для CentOS 6.5.
Исходное состояние:
- Есть аккаунт на tunnelbroker.net
- Чистый CentOS 6.5 с двумя интерфейсами: в локальную сеть и в публичный интернет с прямым (можно динамическим) IP-адресом.
Будет получено в итоге
Шлюз из локальной сети в IPv6-интернет, на котором разрешены исходящие подключения и запрещены входящие (чтобы кто попало в локальную сеть не ломился). Маршрутизатор анонсирует себя в локальной сети и клиенты автоматически настраиваются на сеть без состояния.
НЕ будет рассматриваться
настройка DNS для IPv6, в моем случае на шлюзе в локальной сети уже стоит bind, он отдает IPv6-адреса без доп. настроек.
Создание туннеля
- На tunnelbroker.net слева нажать ссылку «Create Regular Tunnel”
- Вписать текущий IP шлюзв в поле IPv4 Endpoint (Your side).
- С сервера, который будет шлюзом попинговать каждый предложенный IP из списка „Available Tunnel Servers” и выбрать сервер с минимальным пингом. Туннель привязывается к этому серверу и весь трафик будет идти через него. Поменять этот сервер потом можно будет только путем создания нового туннеля. Для целей статьи пусть это будет сервер 1.2.3.4. Нажать Create tunnel.
Подключение шлюза к туннелю
- Если на шлюзе настроен 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-сеть появится на самом шлюзе, можно проверить попинговав сам брокера
chmod +x ./tunnelbroker-ipv6 ./tunnelbroker-ipv6 up ping6 tunnelbroker.net
Настройка маршрутизации трафика из/в локальную сеть
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # включение маршрутизации IPv6 трафика на всех интерфейсах echo net.ipv6.conf.all.forwarding=1 >> /etc/sysctl.conf # сохранение маршрутизации при перезапусках сервера 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.confinterface eth0 # Указать интерфейс локальной сети { AdvSendAdvert on; # Рассылать информацию что этот компьютер выступает шлюзом prefix 2001:db8:28:1f::/64 # Префикс домашней сети, из которого клиенты будут набирать себе адреса. Поле "Routed /64” { }; };
service radvd start # запуск chkconfig radvd on # включение в автозапуск
В этот момент IPv6 должен заработать в локальной сети для всех устройств которые поддерживают его автонастройку, можно проверять на сайте test-ipv6.com.