首页 > 解决方案 > 对 IP 转发端口未返回的响应

问题描述

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

情况

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

但是,请求在浏览器 ( 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,nop,nop,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, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 280734035 ecr 0,sackOK,eol], 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, options [mss 1460,sackOK,TS val 2493575411 ecr 281722216,nop,wscale 7], length 0

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

标签: networkingraspbian

解决方案


问题如下

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,而不是直接返回给客户端。


推荐阅读