基于 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
l4ever 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 1
@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 42 天前
@a9k1n9 这样 ping 的数量是不是看起来很吓人
|