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

Ala*_*son 5 linux iptables gateway

大家早上好。在我们的网络中,我们有一台具有别名 IP 地址的 Linux 机器。这些 IP 地址中的每一个都位于由到 ISP 的远程路由器控制的网络上。

我们想使用我们的 Linux box 作为我们内部网络 (10.0.0.x) 的网关,然后让 Linux box 将传出流量转发到另一个网络上的路由器之一。

我读过的所有内容都是关于伪装在两个物理接口卡之间;但是我们只有一张网卡,监听多个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
Run Code Online (Sandbox Code Playgroud)

所以问题是,我在 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
Run Code Online (Sandbox Code Playgroud)

3mo*_*olo 8

-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 伪装