我有一个多宿主系统(Ubuntu 服务器,11.04),其中 eth0 是 lan,eth1 是 wan。两者都有互联网连接,但通过不同的路由。
当系统启动时,尽管它在 *.443 上监听,但我无法连接到 WAN 接口上的 apache(TCP 443)。
但是,如果我关闭 eth0,则可以。在重新启动 eth0 后,我仍然可以访问 apache。
没有活动的 IPTables 规则(策略:接受)。
信息摘要:
系统和内核
Ununtu Server 11.04
$ uname -r
Linux myserver 2.6.38-11-server #50-Ubuntu SMP Mon Sep 12 21:34:27 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
网络接口:
eth0 is lan, dhcp assigned.
eth1 is wan, static ip.
IP表
No rules set.
Policy is ACCEPT
eth1 出站连接正常。
我已经使用 nmap 测试了 eth1 上的出站连接,并且效果很好:
$ nmap -sT -P0 -p80 -eeth1 google.com)
port is open.
从 WAN 进行测试,显示无法访问。
# nmap -sS -P0 -p443 myhost
states the port is filtered
使用 Chrome 从 LAN 进行测试成功。
Apache 正在正确监听:
$ sudo lsof -i :443
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 822 root 4u IPv4 7965 0t0 TCP *:https (LISTEN)
apache2 857 www-data 4u IPv4 7965 0t0 TCP *:https (LISTEN)
apache2 858 www-data 4u IPv4 7965 0t0 TCP *:https (LISTEN)
以下将启用入站连接:
# ifconfig eth0 down
# ifconfig eth0 up
/etc/network/interfaces 的内容
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address xx.yy.zz.ww
netmask 255.255.255.128
gateway xx.yy.zz.1
nameserver 8.8.8.8
问题
我只想简单地问“出了什么问题?”,但我并不指望这个问题中有足够的信息来实现这一点。
相反,我会问:我应该从哪里开始寻找问题的原因?我需要获取什么信息?
编辑:netstat -rvn 输出
重启后
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
xx.yy.zz.0 0.0.0.0 255.255.255.128 U 0 0 0 eth1
10.10.53.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.10.53.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 xx.yy.zz.1 0.0.0.0 UG 0 0 0 eth1
eth0 关闭
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
xx.yy.zz.0 0.0.0.0 255.255.255.128 U 0 0 0 eth1
0.0.0.0 xx.yy.zz.1 0.0.0.0 UG 0 0 0 eth1
eth0 备份
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
xx.yy.zz.0 0.0.0.0 255.255.255.128 U 0 0 0 eth1
10.10.53.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 xx.yy.zz.1 0.0.0.0 UG 0 0 0 eth1
答案1
基于此,我建议您优先使用 eth0 的默认路由。路由只关心发送给定数据包的最佳方式,而不关心一般数据流。客户端将尝试通过 eth0 连接到 xx.yy.zz.1 上的服务器,但响应将从 10.10.53.1 上的 eth1 路由出去。即使回复数据包成功到达目的地,它也会有错误的 IP 地址作为源,客户端不知道如何处理它。您只需在向服务器发出请求时在接口上运行数据包捕获即可验证是否是这种情况。
查看本指南如何将数据包从到达的接口路由回去
答案2
在 httpd.conf 中添加一行指定 wan 地址(将 1.2.3.4 替换为您的 wan IP)。
Listen 1.2.3.4:80
不确定是否有办法将进程绑定到特定端口。如果这是 RHEL,我可以提供更多帮助,不确定 Debian 中是否有路由脚本(嗯,有,只是不确定它们如何工作)。