Tunnelbroker.net - IPv6 Connectivity через Hurricane Electric

Настройка IPv6 connectivity через Hurricane Electric Tunnelbroker.net с использованием SIT (Simple Internet Transition) туннеля на VyOS.

Описание сценария

Use Case

Получение IPv6 connectivity для сетей, где провайдер не предоставляет native IPv6. Tunnelbroker.net предоставляет бесплатные IPv6 туннели для всех желающих.

Применимость:

  • Home networks без native IPv6
  • Small office без IPv6 от ISP
  • Cloud VMs (Yandex Cloud, VK Cloud) для IPv6 connectivity
  • Testing и development IPv6 приложений
  • Dual-stack deployments

Преимущества Hurricane Electric Tunnelbroker

  • Бесплатно: Free IPv6 tunnel service
  • Глобальная сеть: Tunnel endpoints по всему миру
  • /48 IPv6 блок: Достаточно адресов для любой сети
  • BGP опция: Для advanced users (собственный ASN)
  • Стабильность: Hurricane Electric - tier 1 IPv6 provider

Топология сети

                 Internet (IPv4)
                        │
                        │
                 ┌──────▼──────┐
                 │   VyOS      │
                 │   Router    │
                 │             │
      WAN ───────┤ eth0        │  Public IPv4: 203.0.113.1
                 │             │  (Dynamic DHCP)
                 │             │
                 │ tun0        │◄──── SIT Tunnel (6in4)
                 │             │      Local: 2001:470:1f1c:c8f::2/64
                 └──────┬──────┘      Remote: 2001:470:1f1c:c8f::1
                        │
                 ┌──────▼──────┐
                 │  LAN (IPv6) │
      eth1 ──────┤             │  2001:470:1f1d:c8f::1/64
                 │ Router Adv  │  (Routed /64)
                 └─────────────┘
                        │
                 ┌──────▼──────────┐
                 │  IPv6 Clients   │
                 │  (SLAAC)        │
                 └─────────────────┘

Параметры конфигурации

Получите эти параметры после регистрации tunnel на https://tunnelbroker.net/

ПараметрЗначение (пример)Описание
Server IPv4216.66.86.114HE tunnel endpoint
Client IPv4203.0.113.1Ваш public IPv4
Server IPv62001:470:1f1c:c8f::1/64Tunnel remote address
Client IPv62001:470:1f1c:c8f::2/64Tunnel local address
Routed /642001:470:1f1d:c8f::/64Для вашей LAN
Routed /482001:470:c8f::/48Опционально

Регистрация на Tunnelbroker.net

1. Создание аккаунта

  1. Перейдите на https://tunnelbroker.net/
  2. Нажмите Register → Заполните форму
  3. Подтвердите email

2. Создание туннеля

  1. После логина нажмите Create Regular Tunnel

  2. Заполните форму:

    IPv4 Endpoint (Your side): 203.0.113.1
    (Ваш public IPv4 адрес)
    
    Available Tunnel Servers: Выберите ближайший
    (Например: Moscow, Russia для России)
  3. После создания вы получите:

    • Server IPv4 Address: 216.66.86.114
    • Server IPv6 Address: 2001:470:1f1c:c8f::1/64
    • Client IPv6 Address: 2001:470:1f1c:c8f::2/64
    • Routed IPv6 Prefixes:
      • Routed /64: 2001:470:1f1d:c8f::/64
      • Routed /48: 2001:470:c8f::/48 (опционально)
  4. На вкладке Example Configurations → выберите VyOS для reference

3. Важные замечания

  • Dynamic IP: Если ваш IPv4 dynamic (DHCP), используйте Update кнопку или API для обновления endpoint
  • Firewall: Убедитесь что разрешен Protocol 41 (IPv6-in-IPv4)
  • MTU: Рекомендуется 1480 для tunnel interface

Конфигурация VyOS

Сценарий 1: Single LAN (Простая конфигурация)

Полная конфигурация

configure

# Системные настройки
set system host-name vyos-ipv6-gateway
set system time-zone Europe/Moscow

# ===== WAN Interface (получает IPv4 от провайдера) =====

# DHCP client на WAN
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'WAN'

# ===== Hurricane Electric IPv6 Tunnel =====

# SIT tunnel (6in4)
set interfaces tunnel tun0 encapsulation 'sit'
set interfaces tunnel tun0 description 'HE.NET IPv6 Tunnel'
set interfaces tunnel tun0 source-address '203.0.113.1'
set interfaces tunnel tun0 remote '216.66.86.114'
set interfaces tunnel tun0 address '2001:470:1f1c:c8f::2/64'
set interfaces tunnel tun0 mtu '1480'

# ===== IPv6 Routing =====

# Default IPv6 route через tunnel
set protocols static route6 ::/0 interface tun0

# ===== LAN Interface (IPv6 для локальной сети) =====

# LAN с IPv6 из routed /64
set interfaces ethernet eth1 address '2001:470:1f1d:c8f::1/64'
set interfaces ethernet eth1 description 'LAN'

# IPv4 для dual-stack (опционально)
set interfaces ethernet eth1 address '192.168.1.1/24'

# ===== IPv6 Router Advertisement =====

# Enable Router Advertisement на LAN
set service router-advert interface eth1 prefix 2001:470:1f1d:c8f::/64

# DNS servers (HE и Google)
set service router-advert interface eth1 name-server '2001:470:20::2'
set service router-advert interface eth1 name-server '2001:4860:4860::8888'

# RA parameters
set service router-advert interface eth1 default-lifetime '10800'
set service router-advert interface eth1 max-interval '600'
set service router-advert interface eth1 reachable-time '0'
set service router-advert interface eth1 retrans-timer '0'

# ===== System DNS =====

# Добавить IPv6 DNS для самого роутера
set system name-server '2001:470:20::2'
set system name-server '2001:4860:4860::8888'

# IPv4 DNS (для dual-stack)
set system name-server '8.8.8.8'

# ===== Firewall для IPv6 (рекомендуется) =====

# Allow established/related
set firewall ipv6 name WAN6_LOCAL default-action 'drop'
set firewall ipv6 name WAN6_LOCAL rule 10 action 'accept'
set firewall ipv6 name WAN6_LOCAL rule 10 state established
set firewall ipv6 name WAN6_LOCAL rule 10 state related

# Allow ICMPv6
set firewall ipv6 name WAN6_LOCAL rule 20 action 'accept'
set firewall ipv6 name WAN6_LOCAL rule 20 protocol 'ipv6-icmp'

# Apply firewall
set interfaces tunnel tun0 firewall local ipv6-name 'WAN6_LOCAL'

# Firewall для WAN (разрешить Protocol 41)
set firewall name WAN_LOCAL default-action 'drop'
set firewall name WAN_LOCAL rule 10 action 'accept'
set firewall name WAN_LOCAL rule 10 state established
set firewall name WAN_LOCAL rule 10 state related
set firewall name WAN_LOCAL rule 20 action 'accept'
set firewall name WAN_LOCAL rule 20 protocol '41'
set firewall name WAN_LOCAL rule 20 description 'IPv6-in-IPv4'

set interfaces ethernet eth0 firewall local name 'WAN_LOCAL'

commit
save

Сценарий 2: Multiple VLANs (Несколько сетей)

Использование /48 для множества подсетей:

configure

# Tunnel configuration (same as above)
set interfaces tunnel tun0 encapsulation 'sit'
set interfaces tunnel tun0 source-address '203.0.113.1'
set interfaces tunnel tun0 remote '216.66.86.114'
set interfaces tunnel tun0 address '2001:470:1f1c:c8f::2/64'
set protocols static route6 ::/0 interface tun0

# ===== VLAN 10 - Office Network =====
set interfaces ethernet eth1 vif 10 address '2001:470:c8f:10::1/64'
set interfaces ethernet eth1 vif 10 description 'Office VLAN'

set service router-advert interface eth1.10 prefix 2001:470:c8f:10::/64
set service router-advert interface eth1.10 name-server '2001:470:20::2'

# ===== VLAN 20 - Guest Network =====
set interfaces ethernet eth1 vif 20 address '2001:470:c8f:20::1/64'
set interfaces ethernet eth1 vif 20 description 'Guest VLAN'

set service router-advert interface eth1.20 prefix 2001:470:c8f:20::/64
set service router-advert interface eth1.20 name-server '2001:4860:4860::8888'

# ===== VLAN 30 - DMZ =====
set interfaces ethernet eth1 vif 30 address '2001:470:c8f:30::1/64'
set interfaces ethernet eth1 vif 30 description 'DMZ VLAN'

set service router-advert interface eth1.30 prefix 2001:470:c8f:30::/64
set service router-advert interface eth1.30 name-server '2001:470:20::2'

commit
save

Сценарий 3: Dual-Stack (IPv4 + IPv6)

configure

# IPv6 tunnel (as above)
set interfaces tunnel tun0 encapsulation 'sit'
set interfaces tunnel tun0 source-address '203.0.113.1'
set interfaces tunnel tun0 remote '216.66.86.114'
set interfaces tunnel tun0 address '2001:470:1f1c:c8f::2/64'
set protocols static route6 ::/0 interface tun0

# ===== Dual-Stack LAN =====

# IPv4
set interfaces ethernet eth1 address '192.168.1.1/24'

# IPv6
set interfaces ethernet eth1 address '2001:470:1f1d:c8f::1/64'

# IPv4 DHCP Server
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 default-router '192.168.1.1'
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 name-server '192.168.1.1'
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 start '192.168.1.100'
set service dhcp-server shared-network-name LAN subnet 192.168.1.0/24 range 0 stop '192.168.1.200'

# IPv6 Router Advertisement (SLAAC)
set service router-advert interface eth1 prefix 2001:470:1f1d:c8f::/64
set service router-advert interface eth1 name-server '2001:470:20::2'

# IPv4 NAT
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address 'masquerade'

# DNS Forwarding (dual-stack)
set service dns forwarding listen-address '192.168.1.1'
set service dns forwarding listen-address '2001:470:1f1d:c8f::1'
set service dns forwarding name-server '8.8.8.8'
set service dns forwarding name-server '2001:4860:4860::8888'

commit
save

Dynamic IP Update

Проблема

Если ваш WAN IPv4 меняется (DHCP), tunnel перестанет работать.

Решение 1: Tunnelbroker Update Script

# Создать update script
sudo vi /config/scripts/update-he-tunnel.sh
#!/bin/bash

# Hurricane Electric tunnel credentials
TUNNEL_ID="12345"
USERNAME="your-username"
PASSWORD="your-update-key"

# Get current public IP
CURRENT_IP=$(curl -s -4 ifconfig.me)

# Update tunnel endpoint
curl -s "https://ipv4.tunnelbroker.net/ixp/1000/update?username=${USERNAME}&password=${PASSWORD}&hostname=${TUNNEL_ID}&myip=${CURRENT_IP}"

echo "$(date): Updated HE tunnel endpoint to ${CURRENT_IP}"
# Make executable
sudo chmod +x /config/scripts/update-he-tunnel.sh

# Add to task scheduler (run every 5 minutes)
configure
set system task-scheduler task update-he-tunnel executable path '/config/scripts/update-he-tunnel.sh'
set system task-scheduler task update-he-tunnel interval '5m'
commit
save

Решение 2: DDNS Integration

configure

# Use VyOS built-in DDNS с custom service
set service dns dynamic interface eth0 service he-tunnel protocol 'custom'
set service dns dynamic interface eth0 service he-tunnel host-name 'your-tunnel-id.tunnelbroker.net'
set service dns dynamic interface eth0 service he-tunnel username 'your-username'
set service dns dynamic interface eth0 service he-tunnel password 'your-update-key'
set service dns dynamic interface eth0 service he-tunnel server 'ipv4.tunnelbroker.net/ixp/1000'

commit

Интеграция с облачными платформами

Yandex Cloud IPv6 Connectivity

Topology

Hurricane Electric Tunnel
        │
        │ 6in4
        │
VyOS VM в Yandex Cloud
        │
Yandex Cloud VMs (IPv6)

Особенности

  1. VyOS VM в Yandex Cloud:

    # Получить публичный IPv4 от Yandex Cloud
    # Настроить через Yandex Cloud Console или CLI
    
    # Yandex Cloud не предоставляет native IPv6 (пока)
    # Tunnelbroker решает эту проблему
  2. Конфигурация:

    # WAN interface = Yandex Cloud network interface
    set interfaces ethernet eth0 address '10.128.0.10/24'
    
    # Получить public IP через metadata
    # Или использовать Elastic IP
    
    # Tunnel source = Yandex Cloud public IP
    set interfaces tunnel tun0 source-address '<yandex-cloud-public-ip>'
  3. Yandex Cloud routing:

    # Добавить IPv6 routes через VyOS
    # В Yandex Cloud routing table:
    # ::/0 → 10.128.0.10 (VyOS internal IP)
  4. Security Groups:

    # Разрешить Protocol 41 (IPv6-in-IPv4) на VyOS VM
    # Yandex Cloud Security Group rule:
    # Protocol: OTHER
    # Protocol number: 41
    # Source: 0.0.0.0/0

Yandex Cloud CLI

# Создать VM для VyOS
yc compute instance create \
  --name vyos-ipv6-gateway \
  --zone ru-central1-a \
  --network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4 \
  --create-boot-disk image-folder-id=standard-images,image-family=vyos \
  --ssh-key ~/.ssh/id_rsa.pub

# Получить public IP
PUBLIC_IP=$(yc compute instance get vyos-ipv6-gateway --format json | jq -r '.network_interfaces[0].primary_v4_address.one_to_one_nat.address')

# Использовать этот IP для tunnel registration на tunnelbroker.net
echo "Use this IP for HE tunnel: ${PUBLIC_IP}"

# Настроить Security Group для Protocol 41
yc vpc security-group update-rules default-sg-ru-central1-a \
  --add-rule "direction=ingress,protocol=41,v4-cidrs=[0.0.0.0/0]"

VK Cloud IPv6 Connectivity

Topology

Hurricane Electric Tunnel
        │
        │ 6in4
        │
VyOS VM в VK Cloud
        │
VK Cloud VMs (IPv6)

Особенности

  1. VyOS VM в VK Cloud:

    # Floating IP от VK Cloud
    # VK Cloud также не имеет native IPv6 (пока)
  2. Конфигурация аналогична Yandex Cloud

  3. Security Groups:

    # VK Cloud portal → Security Groups
    # Добавить rule:
    # - Direction: Ingress
    # - Protocol: Custom
    # - Protocol Number: 41
    # - Remote: 0.0.0.0/0

Проверка конфигурации

1. Проверка tunnel

# Проверить tunnel interface
show interfaces tunnel tun0

# Output должен показывать:
# tun0: <POINTOPOINT,NOARP,UP,LOWER_UP>
# inet6 2001:470:1f1c:c8f::2/64 scope global

# Ping HE tunnel endpoint (IPv6)
ping 2001:470:1f1c:c8f::1

# Ping Google IPv6 DNS
ping 2001:4860:4860::8888

# Traceroute через tunnel
traceroute6 google.com

2. Проверка IPv6 routing

# Проверить IPv6 routes
show ipv6 route

# Output должен включать:
# ::/0 via :: dev tun0, metric 1024
# 2001:470:1f1d:c8f::/64 dev eth1, metric 256

# Проверить IPv6 connectivity
ping6 ipv6.google.com
ping6 2a00:1450:4010:c0e::71

3. Проверка Router Advertisement

# На VyOS
show service router-advert

# На Linux client в LAN
# Проверить что получен IPv6 через SLAAC
ip -6 addr show

# Output должен показывать global IPv6:
# inet6 2001:470:1f1d:c8f:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic

# Ping from client
ping6 google.com

4. Тест DNS

# На VyOS
nslookup -type=AAAA google.com

# На client
dig AAAA google.com @2001:470:20::2

5. Проверка на tunnelbroker.net

  1. Login → Your Tunnels → выбрать tunnel
  2. Tunnel Details должен показывать:
    • Status: Active
    • Endpoint: ваш current public IPv4
  3. Traffic graphs покажут usage

Troubleshooting

Проблема: Tunnel не поднимается

Симптомы:

show interfaces tunnel tun0
# State: DOWN

Решение:

  1. Проверить source IP:
# Убедиться что source-address соответствует вашему public IP
show interfaces tunnel tun0

# Проверить actual public IP
curl -4 ifconfig.me

# Update tunnel если нужно
set interfaces tunnel tun0 source-address '<correct-public-ip>'
commit
  1. Проверить firewall:
# Protocol 41 должен быть разрешен
show firewall name WAN_LOCAL

# Добавить если отсутствует
set firewall name WAN_LOCAL rule 20 action 'accept'
set firewall name WAN_LOCAL rule 20 protocol '41'
commit
  1. Проверить connectivity до HE endpoint:
# Ping IPv4 endpoint
ping 216.66.86.114

Проблема: Tunnel UP, но нет IPv6 connectivity

Решение:

  1. Проверить default route:
show ipv6 route
# Должен быть ::/0 через tun0

# Добавить если нет
set protocols static route6 ::/0 interface tun0
commit
  1. Проверить DNS:
nslookup -type=AAAA google.com

# Если не резолвится, добавить IPv6 DNS
set system name-server '2001:4860:4860::8888'
commit
  1. Ping test:
# Ping HE gateway
ping 2001:470:1f1c:c8f::1

# Ping external IPv6
ping 2001:4860:4860::8888

Проблема: LAN clients не получают IPv6

Решение:

  1. Проверить Router Advertisement:
show service router-advert

# Убедиться что настроен для LAN interface
show configuration commands | grep router-advert

# Должно быть:
# set service router-advert interface eth1 prefix ...
  1. На Linux client проверить RA:
sudo rdisc6 eth0
# Должен показать RA от роутера
  1. Проверить firewall:
# ICMPv6 должен быть разрешен для RA
show firewall ipv6

# Разрешить если нужно
set firewall ipv6 name WAN6_IN rule 10 action 'accept'
set firewall ipv6 name WAN6_IN rule 10 protocol 'ipv6-icmp'
commit

Проблема: High latency или packet loss

Решение:

  1. MTU optimization:
# Уменьшить MTU на tunnel
set interfaces tunnel tun0 mtu '1280'
commit

# MSS clamping для TCP
set interfaces tunnel tun0 ip adjust-mss '1240'
commit
  1. Выбрать ближайший tunnel server:
# На tunnelbroker.net → Delete tunnel
# Create new tunnel с другим endpoint
# Выбрать geographic closer server

Best Practices

Security

  1. IPv6 Firewall обязателен:

    # IPv6 - это не NAT, все devices публично доступны
    # Firewall критически важен
    
    set firewall ipv6 name LAN6_IN default-action 'drop'
    set firewall ipv6 name LAN6_IN rule 10 action 'accept'
    set firewall ipv6 name LAN6_IN rule 10 state established
    set firewall ipv6 name LAN6_IN rule 10 state related
    # Add specific allow rules
  2. Privacy Extensions:

    # На clients enable IPv6 privacy extensions
    # Linux: net.ipv6.conf.all.use_tempaddr = 2
    # Windows: netsh interface ipv6 set privacy state=enabled

Performance

  1. MTU Optimization:

    # 1480 обычно оптимально для 6in4
    set interfaces tunnel tun0 mtu '1480'
  2. Близкий endpoint:

    • Выбирайте geographic близкий HE tunnel server
    • Lower latency = better performance

Monitoring

  1. Tunnel monitoring:

    # Ping HE gateway каждую минуту
    # Alert если down
    
    #!/bin/bash
    while true; do
      ping6 -c 1 2001:470:1f1c:c8f::1 > /dev/null
      if [ $? -ne 0 ]; then
        echo "$(date): HE tunnel down!" | mail -s "IPv6 Alert" admin@example.com
      fi
      sleep 60
    done
  2. Traffic statistics:

    show interfaces tunnel tun0
    # Проверять RX/TX bytes

Дополнительные ресурсы


Tested on: VyOS 1.4 (Sagitta LTS), VyOS 1.5 (Circinus), Hurricane Electric Tunnelbroker Last updated: 2025-10-14