信息摘要:

信息摘要:

我有一个多宿主系统(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 中是否有路由脚本(嗯,有,只是不确定它们如何工作)。

相关内容