Ubuntu Linux 路由器:在 2 个接口上设置出站 NAT

fei*_*pet 7 linux networking

我正在使用 Ubuntu 12.04 设置路由器。我需要我的路由器在我们的互联网调制解调器和我客户的网络之间进行路由,为此我们获得了一个 IP 地址。

盒子有3个接口:

  1. eth0 - 客户端网络的端口。使用静态 IP 配置。
  2. eth1 - 我们的局域网。配置为静态 IP 192.168.1.1 并提供 DHCP/DNS。
  3. eth2 - 上行至 3G 路由器调制解调器。配置为 DHCP 客户端。

我的 /etc/network/interfaces 看起来像:

# The primary network interface
auto eth2
iface eth2 inet dhcp

# LAN point to our client's network
auto eth0
iface eth0 inet static
address 10.198.250.171
#gateway 10.198.0.4
netmask 255.255.0.0
network 10.198.0.0
broadcast 10.198.255.255
hwaddress ether 00:1E:EC:72:ED:92

# eth1 acts as our LAN's router IP
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
Run Code Online (Sandbox Code Playgroud)

我已将 eth1 配置为用作 DHCP,并在 /etc/rc.local 中按如下方式配置了从 LAN 到 Internet 的 NAT:

# IP forwarding script from our LAN to internet
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth2 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

为了访问我客户的 LAN(这是一个私有的 A 类网络),我配置了一个静态路由,如下所示:

up route add -net 10.0.0.0/8 gw 10.198.250.171 dev eth0
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以从路由器本身 ping 并访问我客户的 LAN,但是从我的任何 LAN 客户端,我都无法让路由器路由到我客户的 LAN。

有人可以建议我还需要做什么吗?我是否需要为 eth0 和 eth2 设置出站 NAT?

任何建议非常感谢。

Dav*_*e C 1

我认为问题在于从客户端 LAN 获取响应,所以是的,您还需要对客户端 LAN 使用 NAT。

让我解释:

LAN 上的节点将您的网关作为其默认网关。

因此,来自它们的任何流量,无论是到客户端网络 (10.0.0.0/8) 还是更广泛的世界 (0.0.0.0/8) 都会流向它。

然后,通往更广阔世界的流量将通过 NAT 传输到 Internet。

到客户端 LAN 的流量按原样转发(我假设此处转发正在工作,NAT 工作表明它正在工作)。

因此,来自内部 LAN 上的节点(假设其 IP 为 192.168.1.200)的数据包将发送到您的网关并转发到客户端 LAN。然而它的源地址仍然是192.168.1.200。

客户端计算机收到此消息并尝试回复 192.168.1.200。

除非客户端 LAN 计算机将路由设置为 192.168.1.0/24,或者其默认网关能够将数据包转发到您的网关,否则它们将无法进行路由。

在网关处启用 NAT 后,源地址 192.168.1.200 将通过 NAT 转换为您的客户端 LAN 网关地址,客户端 LAN 节点可以响应该地址,您的网关将重新寻址并返回该地址。