127.xxx 系列的连接问题

127.xxx 系列的连接问题

在 stack exchange 的网络工程中询问了这个问题,然后被重定向到这里。

我有几个服务器的配置如下

服务器1:

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

更新 sysctl.conf 后重新启动

然后我清除了 iptables。(iptables -F)

结果相同。我想可能是服务器 2 不喜欢使用 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。

从服务器 2 ping 5.0.0.1。Iptables 将目标 IP 替换为 127.15.0.1(在服务器 1 tcpdump 上确认了这一点)。服务器 1 回复了,但回复再次被丢弃。

此时我已经没有主意了。我关闭了 server1 进行维护,并将 127.15.0.1/26 替换为 192.168.1.1/16。在这种情况下,连接工作正常(有或没有 iptables)。现在的问题是,问题是否是由于使用 127.xxx 造成的?如果是,有办法解决吗?如果没有,我还可以尝试什么?

注意:此配置以前是有效的。我们最近丢失了 server2(它使用旧 Linux),我正在从头开始构建它。此外,Windows 不允许将 127.xxx 用于除环回之外的接口。不确定为什么 Linux 允许在非 lo 接口上使用它。也许有理由!

总结一下,我有以下问题:

  1. 当我们尝试配置 127.xxx 时,Windows 会直接拒绝配置,但 Linux 允许这样做,并且还具有全局范围。这有什么用例吗?
  2. 在这种情况下,server2 发送发往 127.xxx 的请求,而 server1 实际上正在发送回复。如果 127.xxx 只是主机内部,他们为什么甚至在链接上发送数据包??

答案1

Linux sysctl 标志位于

/sys/net/ipv4/conf/*/route_localnet

允许禁用此类数据包的合理处理。

route_localnet - 布尔值

路由时不将环回地址视为火星源或目标。这允许将 127/8 用于本地路由目的。默认为 FALSE

由于很少有理智的人会做这样的事情,所以现在这种方法可能有效,也可能无效(我几年前最后一次测试过这种方法)。

请指定任何为此目的保留(可能是本地链路,但不是主机内部)或拥有相关接口的 IP 空间。继续这种奇怪的设置只会导致更多的麻烦,特别是当存在简单的替代方案时。

相关内容