重启 net.eth1 后,Gentoo box 无法 cURL 或 ping

重启 net.eth1 后,Gentoo box 无法 cURL 或 ping

以下内容让我完全困惑。我们目前有一个 gentoo 盒子,它充当我们的 LAMP、DNS、DHCP 服务器。它在网络上分配了一个静态 IP。该服务器通过 BT BusinessHub 路由器直接连接到互联网。该服务器还连接到配线架/交换机端口,该端口将其余办公室(大约 10 台 PC)连接到服务器。

一切都很顺利,直到前几天服务器重新启动。由于某种原因,现在只有部分网络可访问,具体取决于上次重新启动的以太网设备。重新启动 net.eth0 允许办公室服务器进行 cURL、ping 等,但会阻止所有联网 PC 访问互联网。然后重新启动 net.eth1 会将所有互联网恢复到网络,但会阻止服务器再次进行 curl、ping 等。

但是,即使服务器无法 ping、curl 等,我仍然可以通过服务器命令行通过远程 SSH 和远程 MySQL 连接到我们拥有的其他外部服务器。

这是我的路线图(路由器是192.168.1.254):

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth1

这是我的 /etc/conf.d/net:

iface_eth0="192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0"
iface_eth1="dhcp"

然而,以上内容从未发生过任何变化。一切都停止了正常运行,这让我认为这是一条新添加的 Iptables 规则。以下是 Iptables 过滤器表:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  ##.##.##.##          anywhere            tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:2199
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:3199
ACCEPT     tcp  --  ##.###.###.##        anywhere            tcp dpt:http
ACCEPT     tcp  --  ###.###.##.##        anywhere            tcp dpt:2199
ACCEPT     tcp  --  ##.###.###.###       anywhere            tcp dpt:http
ACCEPT     tcp  --  ##.###.##.##         anywhere            tcp dpt:http
ACCEPT     tcp  --  ##.###.###.###       anywhere            tcp dpt:3128
ACCEPT     udp  --  ##.###.###.###       anywhere            udp dpt:3128
ACCEPT     tcp  --  ##.###.###.###       anywhere            tcp dpt:http
ACCEPT     tcp  --  ##.###.###.###       anywhere            tcp dpt:https
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             ##.###.###.##
DROP       all  --  anywhere             ##.###.###.##
ACCEPT     all  --  anywhere             anywhere            state NEW,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere            udp spt:2199
ACCEPT     udp  --  anywhere             anywhere            udp spt:4817
ACCEPT     udp  --  anywhere             anywhere            udp spt:4819
ACCEPT     udp  --  anywhere             anywhere            udp spt:3199

非常感谢您的帮助。

答案1

您是否意识到您已将 eth0 和 eth1 有效配置为同一子网?

192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

iface_eth0="192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0"
iface_eth1="dhcp"

将路由器上的子网更改为 192.168.0.0/24,或 192.168.1.0/24 以外的其他子网,重新启动 eth1,这样应该可以解决问题。除非这两个接口确实在同一个网络上(但实际上不是),否则不应将它们配置为同一个子网。

此外,所有流量是否都通过您的服务器到达路由器?

如果是这样,我建议只需在路由器上打开桥接功能即可为服务器提供公共 IP 地址。请参阅:http://business.forums.bt.com/t5/Broadband-and-internet/How-to-set-up-bridge-mode-on-the-BT-business-hub/td-p/4902 ——这将完全避免这个问题,尽管我不熟悉你的路由器,你可能想避免这种情况;他们称之为桥接,看起来它可能是一个直通,它仍然进行身份验证(BT 是否进行 PPPoE/PPPoA 身份验证?),但会传递 DHCP 信息。

如果您不使用/不需要,那么设置两个 NAT 子网就是一种浪费。

答案2

听起来您的接口似乎配置为默认不允许转发,因此当重新启动接口时,它会停止转发,从而显示您遇到的问题类型。

尝试将其添加到您的 /etc/sysctl.conf

添加/取消注释以下行:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

如果您有一个动态互联网地址,您可能想要启用此功能:

net.ipv4.ip_dynaddr = 1

这应该可以解决你的问题

相关内容