基于 socks5 协议给公司做了个代理访问的系统.客户端部分类似 clash 使用的 tun 设备引流的方式.网关是 go 编码实现的 socks5 server 端.
问题是 ping 和 traceroute 是 IMCP 协议,没法使用 socks5 代理. 请问在上述设计上怎么扩展可以支持 ping 和 traceroute
1 Badupp 2023-07-03 13:55:36 +08:00 sock5 是四层。ICMP 是三层。怎么 代理? |
![]() | 2 ShineyWang 2023-07-03 13:56:29 +08:00 导入到 Netch,应该支持 ICMP |
3 leonshaw 2023-07-03 14:00:34 +08:00 VPN |
![]() | 4 Kinnice 2023-07-03 14:00:43 +08:00 如果是 fake 的 ping ,可以使用 tun2socks 然后魔改一下实现,如果是真的 ping ,bye~ 网络层级都不同 |
![]() | 5 monstervivi 2023-07-03 14:02:23 +08:00 试一试修改 iptables 来支持? |
![]() | 6 wanmyj 2023-07-03 14:04:12 +08:00 ipsec 这种代理才可以 |
7 LaTero 2023-07-03 14:04:26 +08:00 via Android 用真 vpn ,openvpn 可以指定 socks ,路由表里要让代理机 ip 走真网关,否则会循环。 |
![]() | 8 smileawei 2023-07-03 14:11:37 +08:00 大部分的科学工具都支持入口是 socks openvpn over socksproxy 然后记得调整好 mtu 。分流的话,可以考虑用 chnrouter 去做路由层的分流。 不过这一整套组建都需要自己搞。做好心里准备。 |
11 yxmyxmyyy 2023-07-03 14:31:27 +08:00 via Android wireguard 可以代理 |
![]() | 12 ysc3839 2023-07-03 14:35:12 +08:00 via Android 你这个代理怎么实现 UDP 代理的? ICMP 也是类似的逻辑,简单改改就好了。 |
![]() | 13 tool2d 2023-07-03 14:47:50 +08:00 楼上说的对,ICMP 类似 UDP ,代理软件特殊处理一下就行。比如加个 RPC 远程转发指令。 虽然可以实现,但是一般来说没太大必要,ping 又不带具体数据。 |
14 x77 2023-07-03 14:48:23 +08:00 应用层: http 、ftp <-----> socks 被动代理应用层协议 传输层:tcp 、udp 网络层:icmp <-------> vpn 主动劫持网络及上层的协议 |
15 0o0O0o0O0o 2023-07-03 15:11:58 +08:00 via iPhone 我是在任意支持 UDP 的代理上跑 wireguard ,写规则让 icmp 走 wireguard |
16 jiulang 2023-07-03 15:15:38 +08:00 就算对 socks5 扩展支持 icmp 得到 socks6 ,问:应用程序如何拦截系统的 icmp 包 |
17 luckyc 2023-07-03 15:28:48 +08:00 tcpping 呗 |
![]() | 18 iqoo 2023-07-03 16:39:58 +08:00 linux 的 ssh 内置 tap 转发 |
![]() | 19 lisxour 2023-07-03 16:53:47 +08:00 @specture #10 由于 icmp 属于特殊协议,在特殊场合可能会被拦截,所以有一种方式就是通过 socket 连接目标,看下连不连的上,以及延迟,这就是 fake ping 。 |
20 angryPHP 2023-07-03 18:15:35 +08:00 zerotier 的为啥可以 |
![]() | 21 retanoj 2023-07-03 18:27:12 +08:00 在你这种场景下,不是说 socks 不可以代理 ICMP ,而是你客户端软件上面向操作系统建立的 tun 设备在收到一个 ICMP 数据包的时候怎么处理 |
![]() | 22 snoopygao 2023-07-03 19:10:27 +08:00 用 wireguard 代替 其它代理 ,icmp 属于 ip 层协议,socks 只能代理 tcp/udp |
24 specture OP @0o0O0o0O0o 大佬能更具体一点嘛?客户端写规则走 icmp,然后网关部署 wireguard 嘛? |
25 0o0O0o0O0o 2023-07-03 20:45:19 +08:00 via iPhone ![]() @specture 我电脑是 Linux ,本机跑代理和 wireguard 1. 为了不让 wireguard 自动添加路由规则影响正常的代理分流,wireguard 配置 Table = off 2. AllowedIPs 照常写 3. 通过 PostUp 添加路由规则,例如已创建对应的 wireguard 路由表是 51820 ,那 PostUp = ip -4 rule add ipproto icmp lookup 51820 就行了 网关上做这些事情只会更容易 |
26 specture OP @0o0O0o0O0o 好的,谢谢 |
27 specture OP @ysc3839 大佬你指的 UDP 是指 socks5 使用 UDP 作为传输协议还是指 UDP 流量走 TCP 传输的 socks5 隧道? |
29 bugfan 2023-07-07 14:29:07 +08:00 socks 是代理,得用 vpn 协议 否则就得自己弄一些手段,接管系统网络流量,然后通过这个 socks 代理送出去 #12 #13 说的也对,如果你自己改也可以,我记得网络包有一个字段可以区分这三个协议,0x06 是 TCP,0x01 是 UDP,0x11 是 ICMP |
![]() | 30 zachary99 2023-07-09 23:44:20 +08:00 via Android clash 的虚拟网卡,应该是能代理 ICMP 包 |
32 busier 2023-07-10 20:14:50 +08:00 @angryPHP 因为他底层是 WireGuard ,属于真正意义上的 VPN 。 真正意义上的 VPN 都可以三层转发,例如 PPTP 、L2TP 、IKEv2 、OpenVPN 、WireGuard 等。 |
33 a9k1n9 2023-07-10 20:37:45 +08:00 via Android https://github.com/esrrhs/pingtunnel 有这样的项目,但是不管怎么优化也只能跑个 3 - 4mb/s ,效率太低。 |
34 specture OP @a9k1n9 这个项目似乎是用 ICMP 做隧道发 TCP/UDP 数据的?和我现在需求应该是相反的. pingtunnel 这个感觉像是给攻防对抗用的 |
35 specture OP @ysc3839 大佬再请教一下,能否走 TCP 连接去转发 ICMP 包.延时稍微大一点可以接受.UDP 担心数据包被运营商丢弃 |
37 specture OP @ysc3839 大佬我参考你的实现用 TCP 连接实现了,但是遇到一个问题,请教一下: 如果启动多个 cmd 实例去 ping 不同的地址,比如打开两个 cmd 创建 ping 192.168.1.1 -t 和 ping 192.168.1.2 -t,过一会就出现 ping 1.1 的结果里面有来自 1.2 的 response. 我想请问下网卡收到的不同的 ping 的回包,是怎么关联到不同的 cmd 实例的? tcp 和 ip 可以通过端口,ping 是怎么做的?我怎么解决这个问题 |
38 thegodofoxeris 364 天前 @a9k1n9 这样 ping 的数量是不是看起来很吓人 |