关于通过 iptables 实现 Internet/ConnectionSharing (NAT) 的问题

关于通过 iptables 实现 Internet/ConnectionSharing (NAT) 的问题

我正在按照本教程设置 NAT 网关:https://help.ubuntu.com/community/Internet/ConnectionSharing#Ubuntu_Internet_Gateway_Method_.28iptables.29

只需将 eth0 作为 WAN,将 eth1 作为 LAN,它就可以正常工作。然后我尝试将 eth1 和 eth2 桥接到 br0 作为 LAN,并稍微修改了脚本:

sudo iptables -A FORWARD -o eth0 -i **br0** -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这并没有按预期工作。结果是只有连接到 eth1 的客户端才能通过 NAT。

基本上,我希望连接到 eth1 和 eth2 的所有客户端都在同一个 LAN 中,并且它们都可以通过 NAT 连接到互联网。

我在脚本中犯了什么错误吗?谢谢!

更新#1:

这是我的配置:

wexia@ubuntu12:/etc$ ifconfig -a
br0       Link encap:Ethernet  HWaddr 00:15:5d:83:5f:0c  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::215:5dff:fe83:5f0c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:560 (560.0 B)  TX bytes:7454 (7.4 KB)

eth0      Link encap:Ethernet  HWaddr 00:15:5d:83:5f:07  
          inet addr:10.122.122.97  Bcast:10.122.123.255  Mask:255.255.254.0
          inet6 addr: 2001:4898:20:1:215:5dff:fe83:5f07/64 Scope:Global
          inet6 addr: 2001:4898:20:1:2d00:ef97:5f57:33d9/64 Scope:Global
          inet6 addr: fe80::215:5dff:fe83:5f07/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:78422 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2591 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:11743173 (11.7 MB)  TX bytes:479989 (479.9 KB)

eth1      Link encap:Ethernet  HWaddr 00:15:5d:83:5f:0c  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:390 errors:0 dropped:0 overruns:0 frame:0
          TX packets:316 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:26740 (26.7 KB)  TX bytes:41439 (41.4 KB)

eth2      Link encap:Ethernet  HWaddr 00:15:5d:83:5f:0e  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:64 errors:0 dropped:0 overruns:0 frame:0
          TX packets:483 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3702 (3.7 KB)  TX bytes:57163 (57.1 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1278 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:139832 (139.8 KB)  TX bytes:139832 (139.8 KB)

wexia@ubuntu12:/etc$ brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.00155d835f0c   no      eth1
                            eth2
wexia@ubuntu12:/etc$ cat network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet static
bridge_ports eth1 eth2
  address 192.168.1.1
  netmask 255.255.255.0

答案1

确保与桥接相关的所有接口都已设置为开启状态。(可以将某个接口作为桥接的一部分,但未将其设置为开启状态,因此不会有流量通过该“端口”)。

sudo ifconfig eth1 up
sudo ifconfig eth2 up
sudo ifconfig br0 up

另外,请检查桥上的工作,以确保它具有您所期望的接口:

sudo brctl show

确保在桥接接口上分配了 LAN IP 地址,而不是在桥接器/交换机的以太网接口上分配了 LAN IP 地址:

ifconfig eth1
ifconfig eth2

(它们都不应列出 IP 地址)。如果其中一个列出,请尝试以下操作:

sudo ip addr del 192.168.0.1/24 dev eth1

确保您的桥接接口确实具有它:

ifconfig br0

(应该列出地址)。如果没有地址,请执行以下操作:

 sudo ip addr add 192.168.0.1/24 dev br0

我要尝试检查的另一件事是:查看连接到 eth2 的任何客户端是否可以 ping eth1 上的任何内容。如果可以,则网桥和接口(及其启动/关闭状态)可能设置正确,我会查看 IPtables 规则。如果它们无法相互通信,则可能与 IPtables 无关,可能是网桥或其中的接口存在问题。

相关内容