Networking

127.xxx 系列的連接問題

  • August 30, 2021

在堆棧交換中的網路工程中提出了這個問題,並被重定向到這裡。

我有幾台具有以下配置的伺服器

伺服器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)

結果相同。我想可能是 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),我正在從頭開始建構它。此外,Windows 不允許將 127.xxx 用於環回以外的介面。不知道為什麼 Linux 允許它在非 lo 介面上使用。可能是有道理的!

總結一下,我有這些問題:

  1. 當我們嘗試配置 127.xxx 時,Windows 完全拒絕該配置,但 Linux 允許它,並且在全域範圍內也是如此。有這個案例嗎?
  2. 在這種情況下,server2 發出發往 127.xxx 的請求,而 server1 實際上正在發送回复。如果 127.xxx 只是host-internal,為什麼他們甚至在連結上發送數據包?

Linux sysctl 標誌位於

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

允許禁用對此類數據包的合理處理。

route_localnet - 布爾值

路由時不要將環回地址視為火星源或目標。這允許將 127/8 用於本地路由目的。預設 FALSE

由於很少有理智的人會做這樣的事情,所以這些天這可能會也可能不會起作用(我最後一次測試它是幾年前)。

**請將任何為此目的保留的(可能是本地連結,但不是主機內部)或擁有的 IP 空間分配給相關介面。**繼續這種奇怪的設置只會造成更多的麻煩,尤其是當存在簡單的替代方案時。

引用自:https://serverfault.com/questions/1076027