我正在按照本教程设置 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 无关,可能是网桥或其中的接口存在问题。