Linux
路由 4 網路
我已經嘗試了將近一個星期來讓它工作,但沒有成功。我開始感到絕望。
我有 4 個乙太網適配器:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 30:85:a9:ad:54:1e brd ff:ff:ff:ff:ff:ff inet 10.100.36.2/29 brd 10.100.36.7 scope global eth0 inet6 fe80::3285:a9ff:fead:541e/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether a0:f3:c1:04:64:40 brd ff:ff:ff:ff:ff:ff inet 69.70.164.242/30 brd 69.70.164.243 scope global eth1 inet6 fe80::a2f3:c1ff:fe04:6440/64 scope link valid_lft forever preferred_lft forever 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether a0:f3:c1:04:a0:2f brd ff:ff:ff:ff:ff:ff inet 10.45.13.1/24 brd 10.45.13.255 scope global eth2 inet6 fe80::a2f3:c1ff:fe04:a02f/64 scope link valid_lft forever preferred_lft forever 5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 28:10:7b:c9:58:76 brd ff:ff:ff:ff:ff:ff inet 10.45.15.1/24 brd 10.45.15.255 scope global eth3 inet6 fe80::2a10:7bff:fec9:5876/64 scope link valid_lft forever preferred_lft forever
這是我的 linux 伺服器 (Debian) 在啟動時給我的預設路由:
69.70.164.240/30 dev eth1 proto kernel scope link src 69.70.164.242 10.100.36.0/29 dev eth0 proto kernel scope link src 10.100.36.2 10.45.15.0/24 dev eth3 proto kernel scope link src 10.45.15.1 10.45.13.0/24 dev eth2 proto kernel scope link src 10.45.13.1 default via 10.45.15.254 dev eth3 default via 10.45.13.254 dev eth2 default via 69.70.164.241 dev eth1 default via 10.100.36.1 dev eth0
這就是我想做的。eth0 是我的 VDSL 線路,eth1 是我的電纜線路。我想要:
- 將所有流量從
10.45.13.0
(eth2) 轉發到網關10.100.36.1
(eth0)- 將所有流量從
10.45.15.0
(eth3) 轉發到網關69.70.164.241
(eth1)如果我完成這項工作,我會很高興,但我也想讓
10.45.13.0
隱形,10.45.15.0
反之亦然。
您只能有一個預設路由…每個路由表。因此,首先您需要刪除除一條以外的所有預設路由。您希望您的 debian 伺服器使用的一種路由。
對於您的其他內容,您想要的稱為“源路由”,這意味著您根據目前處理的數據包的來源(源)執行不同的路由。
這是一個範例,您實際上想要對源路由執行什麼操作。您的問題表述得有些不穩定,所以我假設您希望您的 debian 伺服器也使用您的 VDSL 線路。
這意味著您要從路由表中刪除所有預設路由,但要刪除通過 eth0 的路由。您的主/定位 RT 應如下所示:
69.70.164.240/30 dev eth1 proto kernel scope link src 69.70.164.242 10.100.36.0/29 dev eth0 proto kernel scope link src 10.100.36.2 10.45.15.0/24 dev eth3 proto kernel scope link src 10.45.15.1 10.45.13.0/24 dev eth2 proto kernel scope link src 10.45.13.1 default via 10.100.36.1 dev eth0
然後按照連結的範例創建另一個路由表。您可能更願意呼叫該表
UseCable
而不是John
. 所以你可以去echo 200 UseCable >> /etc/iproute2/rt_tables
然後你告訴你的核心在數據包來自
10.45.13.0
這樣的時候使用那個表:ip rule add from 10.45.15.0 table UseCable
然後您需要填充 UseCable。下面是一個開始:
ip route add 10.45.15.0/24 dev eth3 table UseCable ip route add 69.70.164.240/30 dev eth1 table UseCable ip route add default via 69.70.164.241 table UseCable #that's the default route via cable
好吧,那麼你就完成了路由。我想你也想要NAT。所以你需要一些類似的東西
#for everything from eth3 leaving through eth1 iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE #for everything from eth2 leaving through eth0 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
完畢。這不是最乾淨的方式,但 10.45.13.0/24 和 10.45.15.0/24 之間的通信是不可能的,因為當來自 10.45.15.0/24 時,路由表不包含 10.45.13.0/24 的條目。
我把改進留給你作為練習。