xjasonlyu / tun2socks

tun2socks - powered by gVisor TCP/IP stack
https://github.com/xjasonlyu/tun2socks/wiki
GNU General Public License v3.0
2.85k stars 405 forks source link

How to make tun2socks proxy ICMP #224

Closed johnnyhansen-away closed 1 year ago

johnnyhansen-away commented 1 year ago

Description

我希望在tun2socks 上完成对ICMP的代理, 从tun2socks上拿到icmp的数据包后修改数据包转发到代理服务器, 由代理服务器进行fake_ip反解, 探测是否能ping通. 如何修改能在tun2socks上拿到icmp的数据包, 谢谢! func process() { for { select { case conn := <-_tcpQueue: logs.Logger.Infof("new tcp connect selected") go handleTCPConn(conn, &baseInfo) case conn := <-_udpQueue: logs.Logger.Infof("new udp connect selected") go handleUDPConn(conn, &baseInfo) case conn := <-_icmpQueue: // 是否能拿到此数据 go handleIcmpConn() } } }

Is this feature related to a specific bug?

No response

Do you have a specific solution in mind?

No response

xjasonlyu commented 1 year ago

ICMP包确实可以拿到,但我觉得这个需求很奇怪。

首先你得有个特殊的代理服务器/协议去发送这种icmp报文;其次,ICMP也不是这么用的,比如它的TTL需不需要考虑进去,或者难道只有ping这一个场景?

johnnyhansen-away commented 1 year ago

ICMP包确实可以拿到,但我觉得这个需求很奇怪。

首先你得有个特殊的代理服务器/协议去发送这种icmp报文;其次,ICMP也不是这么用的,比如它的TTL需不需要考虑进去,或者难道只有ping这一个场景?

是这样的, 当内网的服务做了代理和服务隐藏后, 域名对应fake_ip后, 此时会出现混乱情况, ping域名不通, 但是服务可以正常访问, 体验不是很好, ttl应该也是可以处理的, 不过也可以后续在处理, 先实现对ping的处理, 希望你给些建议实现此功能

xjasonlyu commented 1 year ago

不明白这和fakeip有什么关系,tun2socks默认会响应所有icmp报文。

johnnyhansen-away commented 1 year ago

不明白这和fakeip有什么关系,tun2socks默认会响应所有icmp报文。

我这样说吧, 就是对于一个服务, 因为tun2socks只做了tcp和udp的代理, 而没做icmp的处理, 比如一个内网服务, 在外网环境下, 实际是ping不通的, 但是服务可以正常使用, 这会让人产生疑惑(很多人会找IT问啥情况), 作为透明代理, 希望能覆盖到icmp协议, 提高使用体验也少一些维护成本

xjasonlyu commented 1 year ago
  1. 目前所有常见的代理协议,仅支持传输层代理,即只能代理TCP/UDP数据
  2. 有非常多的服务包括防火墙在内,都会对ICMP做出丢包行为,所以ping不通但能访问服务是很常见的
johnnyhansen-away commented 1 year ago

嗯嗯, 因为我也是看从tun2socks 中能拿到icmp包, 所以才想到把这个问题解决掉, 我想着开发成本应该不高

johnnyhansen-away commented 1 year ago

你好, 大佬, 我看你在https://github.com/xjasonlyu/tun2socks/issues/39 这里提到了如何修改处理ICMP包, 能在详细的帮忙说一下么, 我尝试了一下没办法对报文进行修改并转发, 多谢

github-actions[bot] commented 1 year ago

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days