127.xxx 系列的连接问题

网络工程 路由 网络 联网 linux 环回
2022-03-06 09:23:53

我有几台具有以下配置的服务器

服务器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),我正在从头开始构建它。

1个回答

引用RFC5735

127.0.0.0/8 - 此块被分配用作 Internet 主机环回地址。由更高级别协议发送到该块内任何地址的数据报在主机内部循环返回。这通常仅使用 127.0.0.1/32 进行环回来实现。如 [RFC1122] 第 3.2.1.3 节所述,整个 127.0.0.0/8 块内的地址不会合法地出现在任何地方的任何网络上。

使用 127.0.0.0/8 范围内的任何地址在主机之间进行通信都不应该起作用。对于本地网络,可以使用RFC1918中定义的任何 IP 范围。