IPv6-сервер во внутренней сети за Кинетиком
Имеется роутер Keenetic на свежей прошивке (4.0), имеется на нем (наконец-то) нативный IPv6 от Ростелекома, но с хаотически меняющимся при каждом соединении адресом/сетью, и имеется тоннель от HE со стабильным адресом.
Хочется выход через РТ, но сервер с адресом на HE.
Плюс по умолчанию еще весь IPv6 извне зарезан к чертовой матери, и штатных средств отключить это в интерфейсе и в CLI нет как класса.
Ну что ж, зря что ли Entware ставили? Чтоб выдернуть настройки - воспользуемся командой ndmc, вывод там не самый удобный, многострочный, но awk нам поможет.
Разрешаем трафик извне на сервер.
/opt/etc/ndm/netfilter.d/ipv6:
#!/opt/bin/sh
SERVER=100
SUBNET=$(ndmc -c "show ipv6 prefixes" | awk '
/prefix:/ {prefix=$2}
/interface:/ {iface=$2}
prefix && iface {print iface ">" prefix; prefix=""; iface=""}
' | grep TunnelSixInFour0 | cut -d '>' -f 2)
PREFIX=$(echo $SUBNET | cut -d '/' -f 1)
/opt/sbin/ip6tables -D FORWARD -d $PREFIX$SERVER -j ACCEPT 2>/dev/null
/opt/sbin/ip6tables -I FORWARD -d $PREFIX$SERVER -j ACCEPT
Настраиваем маршрутизацию приходящего из HE-подсети в соответствующий интерфейс.
/opt/etc/ndm/wan.d/ipv6:
#!/opt/bin/sh
SERVER=100
SUBNET=$(ndmc -c "show ipv6 prefixes" | awk '
/prefix:/ {prefix=$2}
/interface:/ {iface=$2}
prefix && iface {print iface ">" prefix; prefix=""; iface=""}
' | grep TunnelSixInFour0 | cut -d '>' -f 2)
PREFIX=$(echo $SUBNET | cut -d '/' -f 1)
ADDR=$(ndmc -c show interface TunnelSixInFour0 | awk '
/address:/ {addr=$2}
/proto:/ {proto=$2}
proto=="STATIC" {print addr; exit}
'
)
GATE=$(echo $ADDR | rev | cut -d ":" -f 2- | rev):1
/opt/sbin/ip6tables -D FORWARD -d $PREFIX$SERVER -j ACCEPT 2>/dev/null
/opt/sbin/ip6tables -I FORWARD -d $PREFIX$SERVER -j ACCEPT
/opt/sbin/ip -6 route del $ADDR/126 dev tun6in4_0 2>/dev/null
/opt/sbin/ip -6 route del default via $GATE dev tun6in4_0 table 200 2>/dev/null
/opt/sbin/ip -6 route add $ADDR/126 dev tun6in4_0
/opt/sbin/ip -6 route add default via $GATE dev tun6in4_0 table 200
/opt/sbin/ip -6 rule del from $SUBNET table 200 2>/dev/null
/opt/sbin/ip -6 rule add from $SUBNET table 200