127.xxx 系列的連接問題
在堆棧交換中的網路工程中提出了這個問題,並被重定向到這裡。
我有幾台具有以下配置的伺服器
伺服器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 介面上使用。可能是有道理的!
總結一下,我有這些問題:
- 當我們嘗試配置 127.xxx 時,Windows 完全拒絕該配置,但 Linux 允許它,並且在全域範圍內也是如此。有這個案例嗎?
- 在這種情況下,server2 發出發往 127.xxx 的請求,而 server1 實際上正在發送回复。如果 127.xxx 只是host-internal,為什麼他們甚至在連結上發送數據包?
Linux sysctl 標誌位於
/sys/net/ipv4/conf/*/route_localnet
允許禁用對此類數據包的合理處理。
route_localnet - 布爾值
路由時不要將環回地址視為火星源或目標。這允許將 127/8 用於本地路由目的。預設 FALSE
由於很少有理智的人會做這樣的事情,所以這些天這可能會也可能不會起作用(我最後一次測試它是幾年前)。
**請將任何為此目的保留的(可能是本地連結,但不是主機內部)或擁有的 IP 空間分配給相關介面。**繼續這種奇怪的設置只會造成更多的麻煩,尤其是當存在簡單的替代方案時。