Linux

Linux網關:一張網卡如何從一個子網偽裝到另一個子網

  • January 29, 2013

大家早上好。在我們的網路中,我們有一台具有別名 IP 地址的 Linux 機器。這些 IP 地址中的每一個都位於由 ISP 的遠端路由器控制的網路上。

我們想使用我們的 Linux 機器作為我們內部網路 (10.0.0.x) 的網關,然後 Linux 機器將傳出流量轉發到另一個網路上的一個路由器。

我讀過的所有東西都是關於兩個物理介面卡之間的偽裝;但是我們只有一張網卡,監聽多個IP地址。

在 Linux 機器本身上;它可以使用其中一台路由器作為上游網關來 ping 和訪問網際網路。

所以我們的配置如下:

: Linux Box 
 eth0:0 = 10.0.0.5
 eth0:1 = 192.168.137.5
 GW: 192.168.137.1


: Router#1
 IP: 192.168.137.1
 Connection to internet via ISP


: Network Machines
 IP: 10.0.0.x
 GW: 10.0.0.5

所以問題是,我在 Linux 機器上的 iptables/nat 設置是什麼,以允許它接受 10.0.0.x 子網上的數據包並將它們路由到為網關配置的特定 IP 地址。當我嘗試使用 eth0:1 作為我的 -d 時,iptables 抱怨無效字元,從我在網際網路上閱讀的內容來看,這在 iptables 中被禁用(http://lkml.indiana.edu/hypermail/linux/net/9705.1 /0016.html )。

有人可以幫忙嗎?我確信我在這裡遺漏了一些非常明顯的東西;我所有的歷史知識都是兩個獨立的 ethX 網路介面。

謝謝你


更新; 這是“hackity”iptables 腳本

WIFIBACKUP=192.168.137.1

iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t nat

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -s 10.0.0.0/32 -j REDIRECT --to $WIFIBACKUP

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

-d 用於–destination,需要一個地址(或網路)。如果目的地是“任何”,那麼就不要指定它。

重定向不做 NAT。

當您使用別名時,使用 -i 和 -o 不起作用。解決方法是使用-d 和-s。你可以用“!”來否定。因此,對於來自 10.0.0.0/24 且目的地不是 10.0.0.0/24 的所有流量,請進行偽裝:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 !-d 10.0.0.0/24 -j 偽裝

引用自:https://serverfault.com/questions/256261