IPv6 中可以給所有的裝置都分配唯一的全球單撥地址,但並不等於「上級」router 的防火牆就不起作用了。
例如,給 fd00::dead:beef:abcd:1234 開放 443 端口,依然需要在 router 上的防火牆中接受傳入連線並轉發。
消費級裝置中常見的 OpenWRT 其實對 IPv6 防火牆有不錯的支援,可以透過省略前綴、指定後綴來放行連線。這個例子,在端口轉發中指定目標裝置爲 ::dead:beef:abcd:1234/::ffff:ffff:ffff:ffff
但是 RouterOS 中就不是這個狀況了。RouterOS 的 IPv6 防火牆——
- 規則中不能省略前綴;
- 可以使用 ULA,但是無法匹配到使用 GUA 的連線;
- 可以使用 GUA,但是 GUA 會變動;
看起來似乎是死局?其實,使用 ULA 是可以工作的,只是需要再搭配一條對應的 DST NAT 規則。還是同樣的例子,首先添加一條 IPv6 Firewall:
chain: forward
Dst. addr: fd00::dead:beef:abcd:1234
Protocol:6 tcp
Dst. Port: 443
in interface list: WAN
Action: accept
再添加一條 NAT 規則:
chain: dstnat
Protocol: 6 tcp
Dst. Port: 443
in interface list: WAN
Action: dst nat
To Address: fd00::dead:beef:abcd:1234
To Ports: 443
就可以工作了。