无法访问特定公共 IP

无法访问特定公共 IP

我的服务器(运行在 Ubuntu 12.04 上)位于 NAT 后面,必须访问具有公共 IP 地址(64.*.*.*)的特定服务。

问题是我无法访问该特定公共 IP(同一服务的所有其他 IP 地址均可使用;该域已分配了多个 IP 地址)。可以从另一个相同的环境访问相同的 IP 地址。NAT 服务器(我通过它)也可以访问它。

我的服务器上的 Tcpdump 仅显示 SYN 包,而在 NAT 上则不显示来自我的服务器的任何流量。该 IP 未被 NAT 服务器上的 iptables 阻止。同一服务的另一个 IP 工作正常。

方案:

我的服务器 -> 我的 NAT -> (无法访问)公共 IP

路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.2.200      0.0.0.0         UG        0 0          0 eth0
10.10.0.0        10.10.2.1        255.255.255.0   UG        0 0          0 eth0
10.10.2.0        0.0.0.0         255.255.254.0   U         0 0          0 eth0
10.10.9.0        0.0.0.0         255.255.255.0   U         0 0          0 eth1

eth0 的 IP 地址:10.10.2.51

我发现(通过比较 tcpdumps 中的 MAC 地址并查看 arp 表)服务器不是转向我的默认网关,而是尝试通过 10.10.2.1 建立连接(但仅限于该公共 IP)64.*.*.*,这让我很困惑。

答案1

我认为我解决了这个问题。不幸的是,我不知道我做的两件事中的哪一件解决了这个问题。

首先,我从不同的子网(10.10.8.51)添加了一个接口,更改了 NAT 服务器 IP 地址(10.10.8.200)并通过该接口发送所有默认流量。

其次,我发现 NAT 服务器执行了 ICMP 重定向,因此我禁用了接受重定向。我实际上认为这是导致我出现问题的原因,但我没有时间在暂存环境中对其进行测试。

# sysctl -w net.ipv4.conf.eth2.accept_redirects = 0
# sysctl -w net.ipv4.conf.eth2.send_redirects = 0

# sysctl -w net.ipv6.conf.eth2.accept_redirects = 0
# sysctl -w net.ipv6.conf.eth2.send_redirects = 0

相关内容