Linux网关:一张网卡如何从一个子网伪装到另一个子网

Linux网关:一张网卡如何从一个子网伪装到另一个子网

大家早上好。我们的网络中有一台 Linux 机器,它有别名 IP 地址。这些 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

答案1

-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 MASQUERADE

相关内容