DS-Lite:擴展的 NAT 綁定表
我正在嘗試設置 DS-Lite AFTR。由於與 B4 的隧道連接的地址重疊,正常的 NAT 表不起作用(已經嘗試過
iptables -t nat -A POSTROUTING -j MASQUERADE
),如 RFC 6333 中所述。擴展的 NAT 表還將包含 B4 發送的數據包的源 IPv6 地址,這意味著 AFTR 然後知道使用哪個隧道來轉發數據包。如何在 Linux 上進行該擴展?
我正在使用基於 Debian 的系統(Ubuntu 18.04)。
我正在使用
ip tunnel add dslite mode ip4ip6 local <IPv6 address of AFTR> remote <IPv6 address of B4>
AFTR 在每個隧道介面上的地址為 192.0.0.1/29 建立隧道,而 B4 在其隧道介面上的地址為 192.0.0.2/29。注意:我注意到該主題缺乏資源,這很遺憾。這正是我在這裡問的原因。任何幫助表示讚賞!
好的,我現在確實做到了。讓我帶你完成我設置它的過程。我的配置部分在重新啟動後仍然存在。
首先,我用 2 個 B4、1 個 AFTR 和手動設置的所有系統對此進行了測試。
另外我假設您的 AFTR 有 IPv6 地址
2000::1
,第一個 B4 有地址2000::2
,第二個有地址2000::3
。AFTR 的 WAN 介面在eth0
此處命名。讓我們現在開始吧。
首先,我在 AFTR 和 B4 上手動創建了隧道。
在 AFTR 上:
root@AFTR:~# ip tunnel add dslite mode ip4ip6 local 2000::1 remote 2000::2 root@AFTR:~# ip tunnel add dslite2 mode ip4ip6 local 2000::1 remote 2000::3 root@AFTR:~# ip link set dslite up; ip link set dslite2 up root@AFTR:~# ip a add 192.0.0.1/29 dev dslite; ip a add 192.0.0.1/29 dev dslite2
現在我們已經可以在 B4 上建立隧道了。在 B4 1 上:
root@B4-1:~# ip link set dslite up root@B4-1:~# ip a add 192.0.0.2/29 dev dslite root@B4-1:~# ip route add default via 192.0.0.1 dev dslite
在 B4 2 上:
root@B4-2:~# ip link set dslite up root@B4-2:~# ip a add 192.0.0.2/29 dev dslite root@B4-2:~# ip route add default via 192.0.0.1 dev dslite
現在隧道已配置並啟動。但 NAT 尚未在 AFTR 上實施。
root@AFTR:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (eth0 is the Internet side network card) root@AFTR:~# echo "1 dslite" >> /etc/iproute2/rt_tables root@AFTR:~# ip route add default dev dslite table dslite root@AFTR:~# iptables -t mangle -A PREROUTING -i dslite -j MARK --set-mark 1 root@AFTR:~# iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark root@AFTR:~# iptables -t mangle -I PREROUTING -j CONNMARK --restore-mark root@AFTR:~# ip rule add fwmark 1 iif eth0 table dslite root@AFTR:~# echo "2 dslite2" >> /etc/iproute2/rt_tables root@AFTR:~# ip route add default dev dslite2 table dslite2 root@AFTR:~# iptables -t mangle -A PREROUTING -i dslite2 -j MARK --set-mark 2 root@AFTR:~# ip rule add fwmark 2 iif eth0 table dslite2 root@AFTR:~# sysctl -w net.ipv4.fwmark_reflect=1
現在 B4 應該能夠訪問 IPv4(當然還有 IPv6)網際網路。但這並不意味著它們可以相互接觸,在實驗時不要忘記這一點。
終於解決了…