在用户态 NAT tcp 时,有什么办法可以避免被原网段 TCP reset

2017-12-09 12:33:06 +08:00
 cz5424

在 Libpcap 写了个简陋的 nat 程序,从 10.101.116 网段转发到 192.168.1 网段,成功转发 SYN 后,服务器 ACK,之后就被 192.168.1 网段 reset 了,导致连接中断,请问有什么方法可以避免或者解决的吗?

抓包如图 http://gkrg1b.qiniudn.com/QQ%E6%88%AA%E5%9B%BE20171209122513.png

2332 次点击
所在节点    互联网
7 条回复
choury
2017-12-09 13:01:50 +08:00
checksum 没算对?
cz5424
2017-12-09 13:04:23 +08:00
@choury 算对了,我用 iptables 拦截了 192,168 网段的 rst 就能正常访问了
choury
2017-12-09 13:11:54 +08:00
拦截了正常那这个 rst 的是伪造的吧
extreme
2017-12-09 13:14:43 +08:00
看了下抓包。

是 SNAT 到 192.168.1.100 对吧?

不知道你的 NAT 程序是如何实现与 125.88.59.149 通讯的?是和 125.88.59.149 之间另外 open 一个 TCP Socket,还是直接用 raw socket 发出去的?
cz5424
2017-12-09 13:20:49 +08:00
@extreme 这是在 192.168 网段抓的包,是正确的,nat 主要手动转发所有的 10.101 的包到 192.168 网段,并且改了 ip 和 mac,也重新计算了 checksum
extreme
2017-12-09 13:24:23 +08:00
照你那样说,你的 NAT 程序和 125.88.59.149 之间没有另外建立 TCP Socket,你只是改了 Source IP 和 Source MAC,用 Raw Socket 发出去对吧。
这样的话,对于你运行 NAT 程序的系统内核来说,并没有对 125.88.59.149 开放一个通讯 TCP 的端口,所以就会给 125.88.59.149 回应 RESET。

你这样实现 NAT,的确要按需 Block 掉 RESET。
cz5424
2017-12-09 13:27:23 +08:00
@extreme 是的,直接 block 掉不知道会不会出现问题。已经测试了 block 之后能正常访问

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX