如何創建內部多路徑網關
基本上試圖通過一個非常獨特的項目來彎曲橋接和 NATing。
我在下面簡化了我正在做的事情(用於測試的 VM=Kali 虛擬機):
ZoneX 是網路命名空間,vexxx 是使用 ip link 創建的虛擬連結
前提是為 LAN 創建一個網關,該網關可以將流量(基於它是什麼)轉移到 ZoneX 或 ZoneY 修改流量並將其轉發到 ZoneZ,最後到真正的網路網關。
我已經嘗試了很多不同的東西,但是主要問題要麼來自創建第 2 層風暴……在 VM 中不好……或者 NAT 網路命名空間(ZoneZ)通過 NAT 中的第一個介面轉發返回流量客戶端 VM 的表(有時不正確)。
主要目的是將流量分配到多個區域,但讓返回流量採用相同的路線返回,這就是關鍵!下一階段是能夠將多個區域連結在一起,以多種方式修改流量。
*** 編輯
連接範例是對 8.8.8.8 的 DNS 查找和對 8.8.8.8 的 TCP 請求,兩者都來自 VM。
首先,DNS 請求通過 brA 傳遞到 eth0 到 ve001,到標記數據包的區域 A(使用 iptables)並傳遞到 ve003 > ve004 等,再到 ve006,在那裡它被 NAT 並發送到網際網路。當響應返回到 ZoneZ(NAT 區域)時,完成 NAT 表中的查找並將數據包路由到 ve006,因為 VM 機器的 ARP 條目指向該介面。當我想通過底部路由轉發其他流量時,主要的麻煩就來了。與之前相同,直到 ZoneA,但這次它被路由到 ve007,通過 ZoneY,最後進入 ZoneZ,然後通過 NAT gw 並進入網際網路。但是,當收到此連接的回复時,數據包會轉到 ZoneZ,在 NAT 表中完成查找,對其進行轉換,然後完成 ARP 表查找,
我想我的問題應該是,我可以讓 NAT 表記錄它所呈現的介面並通過它轉發回來嗎?
解決方案是標記新連接並將標記用於策略路由:
iptables -t mangle -A FORWARD -i ve006 -m connmark -j CONNMARK --set-mark 6 iptables -t mangle -A FORWARD -i ve010 -m connmark -j CONNMARK --set-mark 10
ip rule
有一個測試fwmark
。因此,您為ve006
和一個為ve010
.ip route add default table ve006 via a.b.c.51 dev ve006 # .51 again, typo? ip route add default table ve010 via a.b.c.51 dev ve010 ip rule add pref 100 iif ve998 fwmark 6 table ve006 ip rule add pref 101 iif ve998 fwmark 10 table ve010