我正在尝试将 ubuntu 服务器配置为路由器。这是我的接口配置(eth2 连接到我的 WAN,eth0 连接到我的 LAN):
auto eth2
iface eth2 inet static
address 192.168.0.249
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255
auto eth0
iface eth0 inet static
address 192.168.100.1
netmask 255.255.255.0
这是路由器信息:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth2
这是 dhcp 配置:
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.101 192.168.100.254;
option domain-name-servers 201.70.86.133;
option routers 192.168.100.1;
authoritative;
}
然后我通过 eth0 上的电缆连接 mac os x。这是 en0 接口配置:
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 00:26:bb:5d:82:b0
inet6 fe80::226:bbff:fe5d:82b0%en0 prefixlen 64 scopeid 0x4
inet 192.168.100.101 netmask 0xffffff00 broadcast 192.168.100.255
media: autoselect (100baseTX <full-duplex>)
status: active
这是路由表:
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.100.1 UGSc 139 32 en0
10.37.129/24 link#8 UC 2 0 vnic1
10.37.129.2 0:1c:42:0:0:9 UHLWI 0 839 lo0
10.37.129.255 ff:ff:ff:ff:ff:ff UHLWbI 0 4 vnic1
10.211.55/24 link#7 UC 2 0 vnic0
10.211.55.2 0:1c:42:0:0:8 UHLWI 0 840 lo0
10.211.55.255 ff:ff:ff:ff:ff:ff UHLWbI 0 4 vnic0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 3 507924 lo0
169.254 link#4 UCS 0 0 en0
172.16.42/24 link#10 UC 2 0 vmnet8
172.16.42.1 0:50:56:c0:0:8 UHLWI 0 839 lo0
172.16.42.255 link#10 UHLWbI 1 24 vmnet8
192.168.100 link#4 UC 2 0 en0
192.168.100.1 0:e0:7c:7e:f:99 UHLWI 139 0 en0 777
192.168.100.101 127.0.0.1 UHS 0 0 lo0
192.168.100.255 ff:ff:ff:ff:ff:ff UHLWbI 0 4 en0
192.168.116 link#9 UC 2 0 vmnet1
192.168.116.1 0:50:56:c0:0:1 UHLWI 0 839 lo0
192.168.116.255 ff:ff:ff:ff:ff:ff UHLWbI 0 4 vmnet1
我的 net.ipv4.ip_forward 已设置,但 iptables 没有定义规则。
当我 ping 192.168.100.1 时,它可以工作。当我 ping 192.168.0.249 时,它也可以工作。但是,当我尝试 ping 192.168.0.1 时,它却不行。在最后一种情况下,当我使用 tcpdump 时,我可以在 eth0 中看到 ICMP 活动,但在 eth2 中看不到任何活动。
有人有办法解决这个问题吗? 有办法调试吗?
谢谢,
答案1
查看/etc/sysctl.conf
提及的行net.ipv4.ip_forward
。如果它仍被注释掉,请取消注释,然后运行sysctl -p
以获取数据包转发。这应该允许您从 192.168.100.101 ping 192.168.0.1。
但是,随后您将必须考虑使用 iptables 将来自 192.168.100.0/24 到外部世界的连接进行 NAT。
答案2
您能从您的 Ubuntu 系统 ping 192.168.0.1 吗?
你的 Ubuntu 系统上启用了转发功能吗?如果你想转发数据包,则需要net.ipv4.ip_forward
启用它;这通常放在/etc/sysctl.conf
:
net.ipv4.ip_forward = 1
然后运行sysctl -p
。
您可以在命令行上进行此项设置(非持久性):
sysctl -w net.ipv4.ip_forward=1
您的本地防火墙是否阻止转发?检查转发的默认策略(或转发链中的任何特定规则)。
答案3
也许你没有跨接口转发数据包?试试
echo 1 > /proc/net/ipv4/ip_forward
echo 1 > /proc/net/ipv6/ip_forward
如果有效,请将其永久设置为sysctl.conf
答案4
找到原因了。
我的 WAN 路由器无法识别 192.168.100.0 网络,因此 icmp 请求到达那里,但无法返回。
更改 WAN 路由器中的路由信息可以解决问题。
谢谢!