我有几台具有以下配置的服务器
服务器1:
lo: 127.0.0.1/16 scope host
eno1: 127.15.0.1/16 scope global
eno2: 5.0.0.1/24
服务器2:
lo: 127.0.0.1/16 (it had /8. I changed the subnet mask using 'ip addr del 127.0.0.1/8 dev lo; ip addr add 127.0.0.1/16 dev lo')
eno2: 5.0.0.2/24
server1 的 eno1 连接到完全不同的 L2 网络,完全隔离。
两台服务器的 eno2 接口连接到同一个 L2 网络。现在我必须从 server2 访问 127.15.0.1。
Server1 早就部署了,我无权更改任何类型的配置。我不知道为什么有人使用具有全局范围的 127.xxx 子网。不确定它是否是有效的配置,但我必须忍受它。我对 server2 有完全的控制权,我可以改变任何东西。
两台服务器都是基于 linux 的。
5.0.0.1 <-> 5.0.0.2 之间的连接良好。
我的第一次尝试是在 server2 中添加一个路由,如下所示
ip r add 127.15.0.1/32 via 5.0.0.1
从 server2 ping 127.15.0.1。我在 server2 上的 tcpdump 中看到 ping 请求和回复,但 ping 命令显示 100% 丢失。
我禁用了 rp_filters
sysctl.cnf:
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.eno2.rp_filter=0
rebooted after updating sysctl.conf
我冲掉了iptables。(iptables -F)
结果相同。我想可能是 server2 不喜欢使用 127.xxx 系列。所以我在服务器 2 上添加了以下规则
iptables -t nat -A OUTPUT -d 5.0.0.1 -j DNAT --to-destination 127.15.0.1
如果数据包的目的地是 5.0.0.1,则此规则应该将目标 ip 替换为 127.15.0.1。
从 server2 ping 5.0.0.1。iptables 用 127.15.0.1 替换了目标 ip(在 server1 tcpdump 上确认了这一点)。Server1 已回复,但回复再次被丢弃。
在这一点上,我没有主意了。我将 server1 取下来进行维护,并将 127.15.0.1/26 替换为 192.168.1.1/16。在这种情况下,连接工作正常(有和没有 iptables)。现在的问题是,问题是因为使用了 127.xxx 吗?如果是的话,有没有办法摆脱它?如果没有,我还能尝试什么?
注意:此配置以前有效。我们最近丢失了 server2(它有旧的 linux),我正在从头开始构建它。