Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 对IP转发端口的响应未返回_Networking_Raspbian - Fatal编程技术网

Networking 对IP转发端口的响应未返回

Networking 对IP转发端口的响应未返回,networking,raspbian,Networking,Raspbian,tl;dr:我有一个问题,而端口转发工作不正常。尽管一路上都能看到数据包,但响应似乎永远不会回来(超时) 处境 简而言之:https://raspberry-ip:5555应加载https://server-ip:9999但是,尽管端口转发似乎正在工作,但事实并非如此 我有一个服务器,它通过一个网站回复9999端口。我可以直接从笔记本电脑访问 我有一个Raspberry Pi,它将流量从本地端口5555转发到服务器端口9999() 我可以看到数据包从服务器返回到我的笔记本电脑 但是,请

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

处境 简而言之:
https://raspberry-ip:5555
应加载
https://server-ip:9999
但是,尽管端口转发似乎正在工作,但事实并非如此

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

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

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

但是,请求在浏览器上超时(
ERR\u CONNECTION\u TIMED\u 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台机器(我的笔记本电脑、raspberry和服务器)都位于同一/24子网上,并且所有路由都已正确配置。此外,我可以ping其中的机器。因此,这看起来不像是路线问题。

问题如下

192.168.250.18    192.168.250.8  192.168.250.250
   [client] ------ [raspberry] ----- [server]
这里发生的情况是,服务器从raspberry pi接收重定向的数据包,但会尝试将数据包直接返回到客户端,因为它们属于同一子网(这是一个假设。您能确认所有设备都有/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,而不是直接返回到客户端。

在端口9999上执行tcpdump时,您在192.168.250.250上看到了什么?我想问题是192.168.250.250。将直接将流量路由回192.168.250.18,这将不起作用。实际上只是添加了它。我们的回答可能是错误的。响应从服务器返回到笔记本电脑,看起来很好。(非常感谢你坚持到底!)这很有效。我删除了源,因为我不希望它是特定于设备的。感谢您在这两个问题上的帮助!