微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对 IP 转发端口的响应不回来 情况问题排查

如何解决对 IP 转发端口的响应不回来 情况问题排查

tl;dr:我遇到了一个问题,而端口转发无法正常工作。尽管一直看到数据包,但响应似乎永远不会回来(超时)。

情况

简而言之:https://raspBerry-ip:5555 应该加载 https://server-ip:9999,但尽管端口转发似乎正常工作,但它并没有加载。

  • 我有一个服务器,它通过一个网站回复端口 9999。我可以直接从我的笔记本电脑访问。

  • 我有一个 RaspBerry Pi,它将流量从本地端口 5555 转发到服务器端口 9999 (details)。

  • 我可以看到数据包从服务器返回到我的笔记本电脑。

但是,请求在浏览器 (ERR_CONNECTION_TIMED_OUT) 上超时。

问题排查

在 RaspBerry Pi 上的端口 5555 上执行 tcpdump,我看到流量传入。示例:

16:54:56.447235 IP 192.168.250.18.57300 > 192.168.250.8.5555: Flags [S],seq 691303721,win 65535,options [mss 1460,nop,wscale 6,TS val 280675211 ecr 0,sackOK,eol],length 0

在服务器的 9999 端口上执行 tcpdump 看起来不错,并且直接来自笔记本电脑:

16:55:55.710925 IP 192.168.250.18.57315 > 192.168.250.250.9999: Flags [S],seq 2427731411,TS val 280734035 ecr 0,length 0

从服务器到笔记本电脑(在笔记本电脑上)执行 tcpdump,我也可以看到交互:

17:12:43.653411 IP 192.168.250.250.9999 > 192.168.250.18.57998: Flags [S.],seq 1225747155,ack 4067090852,win 65160,TS val 2493575411 ecr 281722216,wscale 7],length 0

所有 3 台机器(我的笔记本电脑、树莓派和服务器)都在同一个 /24 子网中,并且所有路由都配置正确。此外,我可以ping通其中的机器。所以它看起来不像是路由的问题。

解决方法

问题如下

192.168.250.18    192.168.250.8  192.168.250.250
   [client] ------ [raspberry] ----- [server]

这里发生的事情是服务器从树莓派接收重定向的数据包,但会尝试将数据包直接返回给客户端,因为它们属于同一子网(尽管这是一个假设。你能确认所有设备都有 / 24 网络?)。 然后客户端将丢弃它,因为它来自服务器的 IP (192.168.250.250) 地址,并且它不是客户端尝试建立到 192.168.250.8 的初始会话的一部分。

解决这个问题的一种方法是在树莓派上执行 SNAT

$ iptables -t nat -I POSTROUTING -p tcp -s 192.168.250.18 -d 192.168.250.250 -j MASQUERADE 

当 raspberry 向服务器发送流量时,这将更改 IP 标头的来源,因此服务器会将流量返回给 raspberry,而不是直接返回给客户端。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。