Припустимо, у мене зараз ця конфігурація на IPv4:
Мій маршрутизатор (скринька Linux) підключений до Інтернету на eth0 та до моєї локальної мережі на eth1. Я хочу переслати порт 80 на 10.1.2.3. Ось як я зараз це робив:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to 10.1.2.3
iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
Тепер я хочу зробити еквівалент на IPv6. Припустимо, у мене така ж конфігурація, як і раніше, з цими змінами:
Мій провайдер надає моєму маршрутизатору діапазон 2001: db8: aaaa :: / 64 через делегування префікса. Мій маршрутизатор приймає 2001: db8: aaaa :: 1 для себе на eth1 і передає 2001: db8: aaaa :: 123 хосту, який я хочу, щоб порт 80 був відкритий.
NAT більше не потрібен у випадку IPv6, тому все, що мені потрібно, - це правило брандмауера, щоб дозволити трафік. Ось правило, про яке я можу зробити це:
ip6tables -A FORWARD -i eth0 -d 2001:db8:aaaa::123 -p tcp -m tcp --dport 80 -j ACCEPT
Проблема, з якою я маю це, полягає в тому, що мені довелося вставити жорсткий код 2001: db8: aaaa :: 123 в моє правило брандмауера, а префікс 2001: db8: aaaa :: може змінюватися за примхою мого провайдера. У світі IPv4 єдиний IP, який мені довелося жорстко кодувати, - це внутрішній, тому я знав, що він ніколи не зміниться з-під мене. Чи можна дозволити такий трафік, не змінюючи правило щоразу, коли мій провайдер змінює делегований префікс? (Якщо pf може робити те, що я хочу, але ip6tables не може, я б готовий перейти на BSD для цього.)