Route ipv6 default linux

Настройка маршрутизатора IPv6 на Linux

В статье рассматривается пример настройки маршрутизатора для проброса IPv6 сети в локальную сеть и автонастройка клиентов.

Настройки должны подойти для любых linux-дистрибутивов, но могут отличаться нарпимер команды установки или названия пакетов. В статье примеры приведены для CentOS 6.5.

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

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

НЕ будет рассматриваться

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

Создание туннеля
  1. На tunnelbroker.net слева нажать ссылку «Create Regular Tunnel”
  2. Вписать текущий IP шлюзв в поле IPv4 Endpoint (Your side).
  3. С сервера, который будет шлюзом попинговать каждый предложенный 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 # Для сохранения настроек при перезагрузке 
#!/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

При публикации некоторые кавычки поменялись с правильных на “красивые», так что как будет работать скрипт после копирования непонятно. Правильный вариант можно скачать тут.

Читайте также:  Linux проверить подключенные диски

Этот скрипт нужно запускать с параметрами 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 # Установка демона, рассылающего информацию об этом шлюзе в локальную сеть. 
interface eth0 # Указать интерфейс локальной сети < AdvSendAdvert on; # Рассылать информацию что этот компьютер выступает шлюзом prefix 2001:db8:28:1f::/64 # Префикс домашней сети, из которого клиенты будут набирать себе адреса. Поле "Routed /64” < >; >;
service radvd start # запуск chkconfig radvd on # включение в автозапуск 

Источник

Маршрутизация в Linux

Linux предоставляет большой набор функций для маршрутизации и инструменты для ее настройки. Ядро 2.6.x поддерживает:

  • Простую статическую маршрутизацию.
  • Equal Cost Multi Path маршруты (маршруты до одной сети с одинаковым весом, которые выбираются с равной вероятностью).
  • Blackhole-маршруты.
  • Множественные таблицы маршрутизации.
  • Policy Based Routing
Читайте также:  How to run process in linux

[править] Команды

Для управления маршрутизацией применяются следующие команды: route, netstat, ip (последняя из пакета iproute2, возможно его придется установить).

Просмотреть таблицу можно следующими способами:

route -n (устаревшее) netstat -rn ip route show cat /proc/net/route

При этом следует учитывать, что доступ ко всем возможностям дает только ip. Используя route вы не только не сможете настроить «продвинутые» функции вроде политик маршрутизации, но и не увидите их существование в выводе команды просмотра, если они уже настроены в системе. Поэтому следует по возможности использовать ip.

Модификация таблицы маршрутизации:

[править] Использование route

Добавление маршрута через шлюз: route add -net 192.168.0.0/16 gw 10.0.0.1 Добавление маршрута через интерфейс: route add -net 192.168.0.0/16 dev eth1 Маршрут до отдельного хоста: route add -host 192.168.0.1 gw 172.16.0.1 Удаление маршрута: route del . 

[править] Использование ip

Синтаксис ip по структуре напоминает синтаксис Cisco IOS. Любые опции могут быть сокращены до потери двусмысленности, например «ip ro ad» вместо «ip route add».

Добавление маршрута через шлюз: ip route add 172.16.10.0/24 via 192.168.1.1 Добавление маршрута через интерфейс: ip route add 172.16.10.0/24 dev eth0 Маршрут с метрикой: ip route add 172.16.10.0/24 dev eth0 metric 100 

Командой вида ip route add blackhole 10.56.50.0/27 можно добавить «зануленный» маршрут (аналог «ip route . null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление DoS-атаки с хоста или иных подобных случаев.

[править] Действия с маршрутами

Кроме add также поддерживаются и другие действия:

  • del — удалить маршрут.
  • replace — заменить маршрут другим.
  • change — изменить параметры маршрута.

[править] Equal Cost Multi Path

Если добавить два маршрута до одной и той же сети с одинаковой метрикой, ядро начнет распределять нагрузку между ними путем выбора того или другого с равной вероятностью. Работает и для более чем двух маршрутов. Предупреждение: это может вызвать проблемы со входящими соединениями, потому что иногда ответ может пойти по другому маршруту, чем пришел запрос. Будьте осторожны.

ip route add default dev eth0 ip route add default dev eth1

[править] IPv6

Настройка маршрутизации IPv6 почти идентична настройке для IPv4.

ip route add ::/0 via 2001:db8:dead:beef::1/64

В некоторых дистрибутивах еще есть нерешенная проблема с маршрутом по умолчанию (например, старые версии RHEL), используйте

[править] Просмотр маршрутов до определенной сети

На маршрутизаторах с длинной таблицей может быть неудобно просматривать вывод «ip route show» в поисках нужного маршрута. В этом случае можно использовать команду вида:

которая выведет маршруты только до указанной сети.

[править] Пересылка пакетов между интерфейсами

Linux позволяет разрешить или запретить пересылку пакетов между интерфейсами (forwarding). На рабочих станциях и серверах приложений ее можно запретить, на маршрутизаторах или межсетевых экранах она, очевидно, должна быть разрешена.

Читайте также:  Посмотреть диски linux terminal

За этот параметр для IPv4 отвечает переменная net.ipv4.ip_forward (1 = «разрешить», 0 = «запретить»).

cat /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward

Для IPv6 используйте net.ipv6.conf.all.forwarding

cat /proc/sys/net/ipv6/conf/all/forwarding echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Чтобы настройки сохранились после перезагрузки, пропишите значения net.ipv4.ip_forward и net.ipv6.conf.all.forwarding в /etc/sysctl.conf.

[править] Конфигурационные файлы

Настройки статической маршрутизации находятся в различных файлах, в зависимости от дистрибутива.

  • Debian GNU/Linux: /etc/network/interfaces
  • RHEL/CentOS/Scientifix: etc/sysconfig/network-scripts/route-
  • Gentoo: /etc/conf.d/net

(добавьте свои дистрибутивы, пожалуйста)

[править] Policy routing

ip route add default via 10.0.1.2 ip rule add from 192.168.1.1 lookup 3 ip route add default via 10.0.3.4 table 3

Для хоста 192.168.1.1 используется особенная таблица маршрутизации (table 3), не такая как для всех остальных хостов. В ней указан единственный маршрут — маршрут по умолчанию.

Все будут ходить через шлюз 10.0.1.2, а 192.168.1.1 — через 10.0.3.4.

[править] Демоны динамической маршрутизации

[править] Дополнительная информация

[править] Примечания

Основные понятия
Сетевой интерфейс | IP | IP-адрес | Маска подсети | Широковещательный адрес | Маршрут | IPv6
Маршрутизация | Форвардинг | Таблица маршрутизации | Шлюз по умолчанию
Маршрутизация в Linux | Маршрутизация в FreeBSD | Маршрутизация в Cisco

Источник

Linux IPv6 Static Routes – Ubuntu/Debian & Fedora/RedHat

Looking at my blog statistics I realized that my most popular posts are those related to practical configuration and How To. This post will be one of them.

During the various tests I’ve performed on Linux platforms, one issue that was common – that if you configure a default gateway like that:

Ubuntu/Debian

iface eth0 inet6 static
address xxxx:xxxx::xxxx/64
gateway xxxx:xxxx::yyyy

Fedora/RedHat

vi /etc/sysconfig/network
NETWORKING_IPV6=yes

vi /etc/sysconfig/network-scripts/ifcfg-eth0

IPV6INIT=yes
IPV6ADDR=xxxx:xxxx::xxxx/64
IPV6_DEFAULTGW=xxxx:xxxx::yyyy

The above works fine when you do network restarts however will fail after a system reboot. The failure is rather interesting. After the reboot it looks like everything is fine till the moment you do some traffic. For instance doing a ping6 will allow one single packet, after which the default is present in the routing table but no packets flow. The situation can be ameliorated by putting in your

/etc/rc.local

ip -6 route add ::/0 via xxxx:xxxx::yyyy dev eth0

The drawback is that even if it works after reboots, you will have to manually add it back after a network restart.
This was not good enough for production.

After searching for some time I finally found how to configure static routes in the right manner so they would work after both reboots and network restart.
An article describing that can be found here or here.

The typical configuration for Ubuntu will be:

vi /etc/network/interfaces

iface eth0 inet6 static
address xxxx:xxxx::xxxx
netmask 64
up ip -6 route add ::/0 via xxxx:xxxx::yyyy dev eth0
down ip -6 route del ::/0 via xxxx:xxxx::yyyy dev eth0

so the routes would add/delete themselves on interface ups or downs.

In case of Fedora/RedHat there is a substitute for the well know

/etc/sysconfig/network-scripts/route-eth0

the equivalent for IPv6 would be:

Источник

Оцените статью
Adblock
detector