Linux

如何將請求路由到內部地址到 localhost

  • August 22, 2021

我剛剛從一個託管環境轉移到另一個,我的網路已經發生了一些變化。

以前,從伺服器到其自己的外部 IP 地址的請求被路由到 localhost,並且 ping 時間與 ping localhost 沒有區別:

wg@akl2:~$ ping akl2.wb.gs
PING akl2.wb.gs (112.109.67.244) 56(84) bytes of data.
64 bytes from akl2.wb.gs (112.109.67.244): icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from akl2.wb.gs (112.109.67.244): icmp_seq=2 ttl=64 time=0.031 ms
[...]
wg@akl2:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.057 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms

現在我在 OpenStack 環境中,ping 時間非常不同:

ubuntu@legacy1:~$ ping legacy1.webgenius.co.nz
PING legacy1.webgenius.co.nz (103.250.241.12) 56(84) bytes of data.
64 bytes from 103-250-241-12.rev.nz-hlz-1.catalystcloud.nz (103.250.241.12): icmp_seq=1 ttl=63 time=0.912 ms
64 bytes from 103-250-241-12.rev.nz-hlz-1.catalystcloud.nz (103.250.241.12): icmp_seq=2 ttl=63 time=0.643 ms
[...]
ubuntu@legacy1:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.051 ms

上述兩個請求應該完全是本地的,因為它們不應該離開機器。

如何將這些請求路由到本地介面?

我的猜測是在後一種情況下,103.250.241.12不是直接在伺服器上配置的(例如,如果你執行ip a,你可能會看到一個私有 IP 而不是前面提到的 IP),即使 IP 專用於它 1: 1個NAT。

如果我的猜測是正確的,並且103.250.241.12不是(太)短暫的,你可以考慮:

iptables -t nat -I OUTPUT -d 103.250.241.12 -j REDIRECT

有關詳細資訊,請參閱iptables-extensions(8)

除了其他答案:

如果所有請求都是由主機名發出的,您還可以添加legacy1.webgenius.co.nz/etc/hosts使其解析為127.0.0.1. 不需要 iptables。

ip addr按照建議進行檢查。

引用自:https://unix.stackexchange.com/questions/665709