specture

怎么让 ICMP 协议走代理

  •  
  •   specture · Jul 3, 2023 · 9962 views
    This topic created in 1218 days ago, the information mentioned may be changed or developed.

    基于 socks5 协议给公司做了个代理访问的系统.客户端部分类似 clash 使用的 tun 设备引流的方式.网关是 go 编码实现的 socks5 server 端.

    问题是 ping 和 traceroute 是 IMCP 协议,没法使用 socks5 代理. 请问在上述设计上怎么扩展可以支持 ping 和 traceroute

    38 replies  •  2024-10-12 14:17:41 +08:00
    Badupp
    Badupp
    Jul 3, 2023
    1
    sock5 是四层。ICMP 是三层。怎么 代理?
    ShineyWang
    ShineyWang
    Jul 3, 2023
    2
    导入到 Netch,应该支持 ICMP
    leonshaw
    leonshaw
    Jul 3, 2023
    3
    VPN
    Kinnice
    Kinnice
    Jul 3, 2023
    4
    如果是 fake 的 ping ,可以使用 tun2socks 然后魔改一下实现,如果是真的 ping ,bye~ 网络层级都不同
    monstervivi
    monstervivi
    Jul 3, 2023
    5
    试一试修改 iptables 来支持?
    wanmyj
    wanmyj
    Jul 3, 2023
    6
    ipsec 这种代理才可以
    LaTero
    LaTero
    Jul 3, 2023 via Android
    7
    用真 vpn ,openvpn 可以指定 socks ,路由表里要让代理机 ip 走真网关,否则会循环。
    smileawei
    smileawei
    Jul 3, 2023
    8
    大部分的科学工具都支持入口是 socks
    openvpn over socksproxy 然后记得调整好 mtu 。分流的话,可以考虑用 chnrouter 去做路由层的分流。

    不过这一整套组建都需要自己搞。做好心里准备。
    specture
    specture
    OP
    Jul 3, 2023
    9
    @Badupp ICMP 不一定走 socks5?客户端 tun 应该是可以支持的,网关扩展一下?
    specture
    specture
    OP
    Jul 3, 2023
    10
    @Kinnice fake 的 ping 怎么理解?麻烦大佬再解释一下
    yxmyxmyyy
    yxmyxmyyy
    Jul 3, 2023 via Android
    11
    wireguard 可以代理
    ysc3839
    ysc3839
    Jul 3, 2023 via Android
    12
    你这个代理怎么实现 UDP 代理的? ICMP 也是类似的逻辑,简单改改就好了。
    tool2d
    tool2d
    Jul 3, 2023
    13
    楼上说的对,ICMP 类似 UDP ,代理软件特殊处理一下就行。比如加个 RPC 远程转发指令。

    虽然可以实现,但是一般来说没太大必要,ping 又不带具体数据。
    x77
    x77
    Jul 3, 2023
    14
    应用层: http 、ftp <-----> socks 被动代理应用层协议
    传输层:tcp 、udp
    网络层:icmp <-------> vpn 主动劫持网络及上层的协议
    0o0O0o0O0o
    0o0O0o0O0o
    Jul 3, 2023 via iPhone
    15
    我是在任意支持 UDP 的代理上跑 wireguard ,写规则让 icmp 走 wireguard
    jiulang
    jiulang
    Jul 3, 2023
    16
    就算对 socks5 扩展支持 icmp 得到 socks6 ,问:应用程序如何拦截系统的 icmp 包
    luckyc
    luckyc
    Jul 3, 2023
    17
    tcpping 呗
    iqoo
    iqoo
    Jul 3, 2023
    18
    linux 的 ssh 内置 tap 转发
    lisxour
    lisxour
    Jul 3, 2023
    19
    @specture #10 由于 icmp 属于特殊协议,在特殊场合可能会被拦截,所以有一种方式就是通过 socket 连接目标,看下连不连的上,以及延迟,这就是 fake ping 。
    angryPHP
    angryPHP
    Jul 3, 2023
    20
    zerotier 的为啥可以
    retanoj
    retanoj
    Jul 3, 2023
    21
    在你这种场景下,不是说 socks 不可以代理 ICMP ,而是你客户端软件上面向操作系统建立的 tun 设备在收到一个 ICMP 数据包的时候怎么处理
    snoopygao
    snoopygao
    Jul 3, 2023
    22
    用 wireguard 代替 其它代理 ,icmp 属于 ip 层协议,socks 只能代理 tcp/udp
    specture
    specture
    OP
    Jul 3, 2023
    23
    @lisxour 嗯,那这种方式类似 httping 或者 tcping
    specture
    specture
    OP
    Jul 3, 2023
    24
    @0o0O0o0O0o 大佬能更具体一点嘛?客户端写规则走 icmp,然后网关部署 wireguard 嘛?
    0o0O0o0O0o
    0o0O0o0O0o
    Jul 3, 2023 via iPhone❤️1
    25
    @specture

    我电脑是 Linux ,本机跑代理和 wireguard

    1. 为了不让 wireguard 自动添加路由规则影响正常的代理分流,wireguard 配置 Table = off

    2. AllowedIPs 照常写

    3. 通过 PostUp 添加路由规则,例如已创建对应的 wireguard 路由表是 51820 ,那 PostUp = ip -4 rule add ipproto icmp lookup 51820 就行了

    网关上做这些事情只会更容易
    specture
    specture
    OP
    Jul 4, 2023
    26
    @0o0O0o0O0o 好的,谢谢
    specture
    specture
    OP
    Jul 5, 2023
    27
    @ysc3839 大佬你指的 UDP 是指 socks5 使用 UDP 作为传输协议还是指 UDP 流量走 TCP 传输的 socks5 隧道?
    ysc3839
    ysc3839
    Jul 5, 2023 via Android
    28
    @specture UDP 流量
    bugfan
    bugfan
    Jul 7, 2023
    29
    socks 是代理,得用 vpn 协议

    否则就得自己弄一些手段,接管系统网络流量,然后通过这个 socks 代理送出去

    #12 #13 说的也对,如果你自己改也可以,我记得网络包有一个字段可以区分这三个协议,0x06 是 TCP,0x01 是 UDP,0x11 是 ICMP
    zachary99
    zachary99
    Jul 9, 2023 via Android
    30
    clash 的虚拟网卡,应该是能代理 ICMP 包
    specture
    specture
    OP
    Jul 10, 2023
    31
    @zachary99 clash 的 ping 应该是直接 return 了,ping 任何地址都是<1ms
    busier
    busier
    Jul 10, 2023
    32
    @angryPHP 因为他底层是 WireGuard ,属于真正意义上的 VPN 。
    真正意义上的 VPN 都可以三层转发,例如 PPTP 、L2TP 、IKEv2 、OpenVPN 、WireGuard 等。
    a9k1n9
    a9k1n9
    Jul 10, 2023 via Android
    33
    https://github.com/esrrhs/pingtunnel
    有这样的项目,但是不管怎么优化也只能跑个 3 - 4mb/s ,效率太低。
    specture
    specture
    OP
    Jul 11, 2023
    34
    @a9k1n9 这个项目似乎是用 ICMP 做隧道发 TCP/UDP 数据的?和我现在需求应该是相反的. pingtunnel 这个感觉像是给攻防对抗用的
    specture
    specture
    OP
    Jul 11, 2023
    35
    @ysc3839 大佬再请教一下,能否走 TCP 连接去转发 ICMP 包.延时稍微大一点可以接受.UDP 担心数据包被运营商丢弃
    ysc3839
    ysc3839
    Jul 11, 2023 via Android
    36
    @specture 当然可以,但是 ICMP 设计就是允许丢包呀,为什么要追求不丢包?
    specture
    specture
    OP
    Jul 17, 2023
    37
    @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 是怎么做的?我怎么解决这个问题
    thegodofoxeris
    thegodofoxeris
    Oct 12, 2024
    38
    @a9k1n9 这样 ping 的数量是不是看起来很吓人
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1364 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 89ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    ♥ Do have faith in what you're doing.