Linux 上两个网络之间的路由?

Linux 上两个网络之间的路由?

我被一个问题困住了,找不到解决办法。我有一台带两个网卡的 Linux PC。第一个网卡 (eth1) 连接到公共 IP(可能是交换机或其他什么,其实并不重要),因此 eth1 连接到 wan,另一个 eth0 连接到交换机并使其成为 lan 网卡。配置:

eth1 ip 地址 88.200.1xx.xxx //xxx 是出于安全原因 eth0 ip 地址 192.168.1.1

wan ------> [eth1 (linux PC) eth0]<---->[switch]<----> [eth1 (PC1)]

现在我想连接这两个网络,这样 PC1 就可以访问 Linux PC 和 WAN。我想我知道如何做,但我无法正确配置。这是我尝试过的:

  1. 我打开了 IP 转发(确定)
  2. 我将 eth1 默认网关设置为 WAN 上的正确 IP
  3. 我尝试将 eth0 默认网关设置为相同的 IP(但是不行)

我该怎么做?我尝试使用 linux route 命令,但遇到了问题。请帮忙。

答案1

如果您的 Linux 机器上有 2 个 NIC,并且都配置了 IP,则您无需添加从一个网络到另一个网络的路由。这将自动完成。

在 WAN NIC 上添加默认网关地址。在 LAN NIC 的配置中不要这样做。

然后在内核中启用转发:

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

要使其在启动时自动设置此值,请取消注释此行/etc/sysctl.conf

#net.ipv4.ip_forward=1

然后在iptables中设置一些规则来执行natting和转发:

# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT

# We allow traffic from the LAN side
iptables -A INPUT -i eth0 -j ACCEPT

######################################################################
#
#                         ROUTING
#
######################################################################

# eth0 is LAN
# eth1 is WAN

# Allow established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# fowarding
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

那就可以了。

答案2

您只能有一个默认网关,因此只能设置一个。

要通过另一个接口路由流量,您需要设置持久静态路由并将其绑定到该接口。

答案3

在设置通过以太网连接到上网本的老式路由器时,我很少需要这样做。我的答案是我在我的博客从 2012 年 9 月开始,非常像Goez 的但更简单:

在路由器上:route add default gw 192.168.42.123(Linux 机器的 eth0 IP)

在 Linux 机器上:sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward",然后 sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

相关内容