Nobody about something

Домашняя сеть белых ipv6 адресов

Написано 23 августа 2010 в 15:03 - Рубрики: *nix

Понадобилось мне заиметь ipv6 адрес, так как у одного нужного мне домена, адрес ipv4 отсутствует как класс.
Но, так как у меня дома небольшая сеть, я решил а почему бы каждому компу не дать свой белый ipv6 адрес (как оказалось, это даже проще сделать, чем делать nat, создавать локальную ipv6 сеть и т.п.)

В наличии имеем следующее:

  • шлюз на FreeBSD, потому и настраивать буду на примере фряхи(хотя для linux не сильно отличается)
  • белый статический ipv4 адрес(можно и динамический, но он должен быть белый, вроде как; если динамический, придётся скриптиком менять IP на сайте и переподнимать туннель). IP должен пинговаться снаружи
  • соединение с провайдером по pppoe, поднимаемое на этом шлюзе
  • 2 компа с линуксом на борту

Итак:

  1. Регистрируемся на сайте www.tunnelbroker.net
  2. После получения email с паролем, авторизуемся и тыкаем Create regular tunner
  3. Вводим свой ipv4 адрес, и выбираем точку подключения(можно подождать пару секунд и точка будет определена автоматически; я перепроверил — определилась с наименьшей задержкой). Тыкаем submit
  4. Мы создали туннель, нам выделили сеть. Нужно теперь это настроить на роутере. Для начала просто проверим работоспособность. Для этого в Tunnel Details смотрим в самом низу страницы «Example IPv6 Tunnel Configurations by OS (Windows, Linux, etc.)«
  5. Выбираем FreeBSD >= 4.4 RELEASE, жмём show config, и видим готовые строки для ввода в консоли
  6. Копипастим их в консоль шлюза, смотрим чтобы всё было без ошибок и проверям
    ~ # ping6 ipv6.google.com
    PING6(56=40+8+8 bytes) 2001:470:1f08:d8c::2 --> 2a00:1450:8005::93
    16 bytes from 2a00:1450:8005::93, icmp_seq=0 hlim=56 time=337.278 ms
    ^C
    --- ipv6.l.google.com ping6 statistics ---
    1 packets transmitted, 1 packets received, 0.0% packet loss
    round-trip min/avg/max/std-dev = 337.278/337.278/337.278/0.000 ms
    
    ~ # 
  7. Теперь надо настроить, чтобы это всё поднималось само при загрузке. Для этого воспользуемся хэндбуком freeBSD
  8. Смотрим снова на страницу Tunnel Details
    Ищем нужные данные. Это

    • Выделенный префикс(сеть)
      Routed /64: 2001:111:1f09:111::/64
    • ipv4, ipv6 адреса сервера
      Server IPv4 address: 216.66.80.26
      Server IPv6 address: 2001:111:1f08:111::1/64
    • ipv4, ipv6 адреса клиента. ipv4 адрес — это внешний IP
      Client IPv4 address: 123.123.123.123
      Client IPv6 address: 2001:111:1f08:111::2/64

    У меня ipv6 адрес сервера и ipv6 адрес клиента были из одной сети/64 и эта сеть на 1 символ отличалась от той, что мне выделенна

  9. У меня в rc.conf за ipv6 отвечают следующие строки
    ipv6_enable="YES" # с этим всё понятно
    ipv6_ifconfig_vr0="2001:111:1f09:111::::1" # первый ip, из выделенного мне префикса(то бишь сети)
    # vr0 - интерфейс, смотрящий в локальную сеть
    ipv6_defaultrouter="2001:111:1f08:111::1" # Server IPv6 address
    gif_interfaces="gif0"
    gifconfig_gif0="123.123.123.123 216.66.80.26" # Client IPv4 address и Server IPv4 address
    ipv6_ifconfig_gif0="2001:111:1f08:111::2 2001:111:1f08:111::1 prefixlen 128" # Client IPv6 address и Server IPv6 address
    ipv6_gateway_enable="YES" # разрешаем быть ipv6 шлюзом
    radvd_enable="YES" # об этом позже
  10. Теперь о том, как раздавать. Можно по «умному», настроить dhcpd и т.п. Но есть другой вей, более простой
    Ставим radvd/usr/ports/net/radvd
  11. В rc.conf radvd_enable=»YES», если не сделали этого выше. И создаём конфиг /usr/local/etc/radvd.conf

    interface vr0 {
            AdvSendAdvert on;
            prefix 2001:111:1f09:111::/64
            {
                    AdvOnLink on;
                    AdvAutonomous on;
                    AdvRouterAddr on;
            };
    };

    Вместо строки prefix пишем выделенную нам сеть.

  12. Ребутим шлюз. У меня без ребута radvd не заработало
  13. После ребута, проверяем что поднялось как ipv6 на шлюза, так и radvd. Пингуем ipv6.google.com с шлюза
  14. Если выше всё успешно, то пингуем тот же ipv6.google.com с компьютера в сети. На самом компьютере ничего делать не нужно. Всё должно работать

Теперь небольшой хинт, обьяснённый мне в конференции gentoo at conference.gentoo.ru

IPv6 адреса, получаемые компьютерам в сети, зависят(точнее генерируются) от Scope:Link (link-local) ipv6 адреса, уже висящего на интерфейсе. А он, в свою очередь зависит от MAC адреса.
То есть каждому компьютеру, будет всегда выдаваться один и тот же ipv6 адрес.
Этот адрес можно и в ДНС прописать.
Потому схема с radvd проще, чем с dhcpd.

Метки: ,

Один комментарий на запись “Домашняя сеть белых ipv6 адресов”

  1. человек слот пишет 16 октября 2011 в 15:46

    Отличная статейка. Спасибо за подробное описание!