Конфигурируем интерфейсы
(подборка)
Под BSD работает команда
ifconfig <if_name> inet6 <address> prefixlen <len>
например,
ifconfig em0 inet6 xxyy:zz::a prefixlen 64
Правда, очень часто встречается синтаксис
ifconfig <if_name> inet6 alias <address> prefixlen <len>
но и без alias все работает.
Маршрут по умолчанию добавляется командой
route add -inet6 default <ipv6_address_of_router>
а просмотреть конфигурацию можно командой
ifconfig <if_name>
и таблицу маршрутизации – командами
route show
или
route -n show -inet6
На BSD, во всяком случае, работают обе. Кстати, netstat -rn
тоже работает.
А в постоянную конфигурацию это дело включается также аналогично IPv4. Так, в OpenBSD для
интерфейса xl0 в «родной» файл /etc/hostname.xl0
добавляется такая строка:
inet6 <ipv6_address>
а шлюз по умолчанию – отдельной строкой в файл /etc/mygate
соответственно. Во FreeBSD это добавляется в /etc/rc.conf
.
Кстати, опять-таки в половине примеров присутствует слово alias
….
В Linux можно пользоваться этими же командами, а также в новых версиях есть замечательная утилита с легко
запоминающимся именем ip
, теперь она входит в состав многих дистрибутивов по умолчанию. Вот как ей пользоваться:
Сначала нужно проверить, включен ли этот протокол в /etc/sysctl.conf
, то есть убедиться, что есть
такие строки и их значения установлены в 0. Если вы внесли такие изменения, то систему нужно перезагрузить.
net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0
Временно можно включить эти параметры при помощи команды sysctl с теми же параметрами, только не нужно делать пробелы между параметром, знаком присвоения и значением.
Включить-выключить интерфейс (скажем, вместо
ip link set dev
up ip link set dev down
Посмотреть конфигурации адресов на интерфейсе:
ip -6 addr show dev
Задать адрес для интерфейса:
ip -6 addr add
/ dev
Удалить его:
ip -6 addr del
/ dev
Посмотреть таблицу с маршрутами
ip -6 route show [dev
]
Добавить маршрут
ip -6 route add
/ via [dev ]
Удалить маршрут
ip -6 route del
/ via [dev ]
На Cisco процесс выглядит так:
на интерфейсе задаем адрес:
ter mon conf t ipv6 addr xxxx:yyyy:zzzz::5 /48 ipv6 enable
Вторая команда автоматически создает link-local адреса.
И, разумеется, при использовании масок /64 можно задавать eiu-адреса для Ethernet-интерфейсов, что здорово упрощает жизнь. Команда для интерфейса при этом выглядит так:
ipv6 addr xxxx:yyyy:zzzz::/64 eiu-64
При этом роутер честно инвертирует 7й бит mac-адреса, хотя практически никто этого не делает.
Также заметил, что если хочешь задать eiu-64 адрес, то на конце префикса обязательно нужно ставить :: – иначе получишь сообщение об ошибке в синтаксисе. Даже если адрес имеет вид 2007:1234:4321:9876, то все равно команда будет выглядеть так:
ipv6 addr 2007:1234:4321:9876::/64 eiu-64
Вот еще заметил: sh run int <name>
покажет эти адреса (точнее – строки), sh int
и sh ip int
– не покажет, а sh ipv6 int
– покажет.
Ну, и для включения процесса роутинга 6й версии нужно дать глобальную команду
ipv6 unicast-routing
… после чего можно включать отладчик deb ipv6 packet
и любоваться.
Автоконфигурирование интерфейса под OpenBSD
Разумеется, тут все посложнее по сравнению с Windows.
Сначала редактируем /etc/sysctl.conf
Меняем только один параметр, точнее устанавливаем его равным 1. В «родном» файле также есть комментарий, что форвардинг должен быть отключен. Вот модифицируемая строка, она должна выглядеть так:
net.inet6.ip6.accept_rtadv=1 # 1=Permit IPv6 autoconf (forwarding must be 0)
Предположим, что у нас сетевой адаптер именуется em0, тогда редактируем файл /etc/hostname.em0
помещаем в него одну-единственную строку
rtsol
(это — для «чистой» IPv6 конфигурации, если не требуется поддержка IPv4)
И — перезагружаем машину. Можно обойтись и без перезагрузки, но у нас была тестовая конфигурация.
Что было сделано?
—в конфигурационном файле было разрешено принимать router advertisement (RA) —в конфигурации интерфейса разрешено использовать router solicitation (RS)
То есть машина сможет получать и использовать для генерации собственного IPv6-адреса префикс (префиксы) от роутера и адрес шлюза по умолчанию.
Проверяем: пусть наш роутер анонсирует 2001:0db8::/64
Смотрим, что стало с нашим интерфейсом:
ifconfig em0 em0: flags=8843mtu 1500 lladdr d0:27:88:3e:22:15 priority: 0 groups: egress media: Ethernet autoselect (100baseTX full-duplex) status: active inet6 fe80::d227:88ff:fe3e:2215%em0 prefixlen 64 scopeid 0x1 inet6 2001:0db8:0:0:d227:88ff:fe3e:2215 prefixlen 64 autoconf pltime 604723 vltime 2591923
Видим: «глобальный» IPv6-адрес получен, linc-local также есть, и оба они построены в соответствии с EUI-64.
Смотрим таблицу роутинга:
(часть информации опущена, самое важное здесь — в строке, помеченной звездочками: это дефолтный маршрут)
route show routing tables Internet6: Destination Gateway Flags Refs Use Mtu Prio Iface ::/104 localhost UGRS 0 0 - 8 lo0 ::/96 localhost UGRS 0 0 - 8 lo0 ** default fe80::222:91ff:fe9 UG 0 3 - 4 re0 ** localhost localhost UH 14 0 33160 4 lo0 ::127.0.0.0/104 localhost UGRS 0 0 - 8 lo0 ::224.0.0.0/100 localhost UGRS 0 0 - 8 lo0 ::255.0.0.0/104 localhost UGRS 0 0 - 8 lo0 ::ffff:0.0.0.0/96 localhost UGRS 0 0 - 8 lo0 2002::/24 localhost UGRS 0 0 - 8 lo0 2002:7f00::/24 localhost UGRS 0 0 - 8 lo0 2002:e000::/20 localhost UGRS 0 0 - 8 lo0 2002:ff00::/24 localhost UGRS 0 0 - 8 lo0 2001:0db8:0:0::/64 link#1 UC 0 0 - 4 re0 2001:0db8:0:0:d227 d0:27:88:3e:20:65 UHL 0 0 - 4 lo0
Проверяем:
$ ping6 ipv6.google.com PING6(56=40+8+8 bytes) 2001:0db8:0:0:d227:88ff:fe3e:2215 --> 2a00:1450:4008:c00::93 16 bytes from 2a00:1450:4008:c00::93, icmp_seq=0 hlim=57 time=43.746 ms 16 bytes from 2a00:1450:4008:c00::93, icmp_seq=1 hlim=57 time=43.991 ms 16 bytes from 2a00:1450:4008:c00::93, icmp_seq=2 hlim=57 time=43.764 ms 16 bytes from 2a00:1450:4008:c00::93, icmp_seq=3 hlim=57 time=43.533 ms 16 bytes from 2a00:1450:4008:c00::93, icmp_seq=4 hlim=57 time=43.734 ms ^C -- ipv6.l.google.com ping6 statistics -- 5 packets transmitted, 5 packets received, 0.0% packet loss round-trip min/avg/max/std-dev = 43.533 /43.754 /43.991 /0.145 ms
Ура, работает!