连接到 localhost 解析 127.0.0.1 但连接外部 IP

连接到 localhost 解析 127.0.0.1 但连接外部 IP

我在使用专用服务器时遇到了问题,我不知道这是否是默认行为,但问题在于此:

如果我使用 localhost 连接到位于服务器上的服务,该服务将获取外部 IP 作为源 IP。

举个例子,我使用 netcat 监听 127.0.0.1:4444

xxxxxx # nc -vv -l -s 127.0.0.1 -p 4444
listening on [127.0.0.1] 4444 ...

让我们检查一下是否正常:

xxxxxx ~ # netstat -atnp | grep 4444
tcp        0      0 127.0.0.1:4444          0.0.0.0:*               LISTEN      14038/nc        

好的,让我们连接:

xxxxxx ~ # nc -vv 127.0.0.1 4444    
localhost [127.0.0.1] 4444 (?) open

返回到正在监听进程的 tty,我得到了这个:

connect to [127.0.0.1] from xxxxxx.net [176.31.xxx.xx] 50354

这就是问题所在。我有一个服务器守护进程,它必须在本地主机上监听,并在客户端连接时检查 ip 是否为 127.0.0.1,但由于某种原因,当我连接到本地主机时,它会报告外部 ip...

如果我对 IPv6 执行相同操作,它会按预期工作...将连接检测为本地主机(::1)。

一些有用的信息:

“localhost” 可以毫无问题地解析为 127.0.0.1

xxxxxx ~ # ping -c1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.086 ms

我认为我的 hosts 文件上没有什么奇怪的东西......

xxxxxx ~ # grep -v ^# /etc/hosts
127.0.0.1   localhost localhost.localdomain
176.31.xxx.xx   xxxxxx.net ns1.xxxxxx.net
::1     ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

ifconfig 报告一切正常......

eth0      Link encap:Ethernet  HWaddr e0:69:95:d8:30:a1  
          inet addr:176.31.xxx.xx  Bcast:176.31.108.255  Mask:255.255.255.0
          inet6 addr: 2001:41d0:8:xxxx::/64 Scope:Global
          inet6 addr: 2001:41d0:8:xxxx:x:xx:xx:xx/64 Scope:Global
          inet6 addr: fe80::e269:95ff:fed8:30a1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16916 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16914 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8410679 (8.0 MiB)  TX bytes:10539881 (10.0 MiB)
          Interrupt:28 Base address:0xe000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5570 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5570 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:744490 (727.0 KiB)  TX bytes:744490 (727.0 KiB)

答案1

解决了

感谢@Cakemox 为我提供的建议iptables。我有以下规则导致了意外行为:

/sbin/iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination xxx.xxx.xxx.xxx:1234
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE

我将以适当的方式解决该重定向,以避免将来出现问题......

相关内容