以下内容让我完全困惑。我们目前有一个 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
这应该可以解决你的问题