无需公网 IP,基于 tcp 协议的 p2p 穿透----疫情期间“内网”<-->"内网"安全穿透 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wslzy007
V2EX    宽带症候群

无需公网 IP,基于 tcp 协议的 p2p 穿透----疫情期间“内网”<-->"内网"安全穿透

  •  
  •   wslzy007 2020-02-05 23:59:42 +08:00 14259 次点击
    这是一个创建于 2144 天前的主题,其中的信息可能已经有所发展或是发生改变。

    别提 frp/ngrok,如果能满我的需求也就不会重复造车了:)。vpn/zerotier?tun/tap 类的工具。。。仁者见仁吧

    良心推荐 smarGate,特点如下:

    1、无需公网 IP
    2、使用 TCP 协议进行 P2P 穿透,无 Qos 之忧
    3、SSL 隧道加密
    4、支持 IPv6 (防火墙)穿透
    5、支持 UDP 游戏串流
    6、免费无限制
    7、小巧简单
    8、。。。

    能干什么?

    1、ssh 远程开发 /运维
    2、RDP 远程桌面
    3、远程摄像头监控
    4、远程游戏串流
    5、私有内网 web 服务访问
    6、。。。

    详见:

    github.com/lazy-luo/smarGate

    59 条回复    2021-01-12 11:00:38 +08:00
    v66ex
        1
    v66ex  
       2020-02-06 00:12:20 +08:00   4
    https://ksa.kanxue.com/ 这个能满足你不
    wslzy007
        2
    wslzy007  
    OP
       2020-02-06 00:19:53 +08:00
    @v66ex 能否支持自定义路由及 P2P 穿透?
    yulihao
        3
    yulihao  
       2020-02-06 08:42:01 +08:00
    谢谢楼主!我的移动就是因为 UDP 的穿透,导致 Qos 严重
    yulihao
        4
    yulihao  
       2020-02-06 08:50:05 +08:00
    没有 Windows 客户端嘛?
    weyou
        5
    weyou  
       2020-02-06 09:08:23 +08:00 via Android   5
    没仔细去看。凡是号称无需公网 ip 穿透的都是自己提供了公网 server 进行穿透,或多或少都有点安全性问题。
    ladeo
        6
    ladeo  
       2020-02-06 09:15:24 +08:00 via Android
    初期 p2p 会话建立的时候肯定要用公网 IP。会话建立后就不需要了。
    公网 IP 不是自己提供就是第三方提供。第三方提供安全怎么保证?
    td width="10" valign="top">
    dabaibai
        7
    dabaibai  
       2020-02-06 09:40:53 +08:00
    有些 isp 是不能建立 p2p 的
    ljpCN
        8
    ljpCN  
       2020-02-06 09:46:12 +08:00 via Android
    @weyou 真相了,我是点开来看到有一步注册账号才反应过来,怎么可能没有公网机器就完成穿透呢
    hehe12dyo
        9
    hehe12dyo  
       2020-02-06 09:59:05 +08:00
    @v66ex ksa 就是 fcn。..
    beastk
        10
    beastk  
       2020-02-06 10:12:11 +08:00 via iPhone
    玩的文字游戏吧
    wslzy007
        11
    wslzy007  
    OP
       2020-02-06 10:52:24 +08:00
    @ljpCN @beastk 对于使用者而言无需公网 IP,即:你手机没有公网 IP,家中宽带无需公网 IP,能实现手机代理访问家中局域网主机,如有 IPv6 或 V4 NAT 支持穿透则可直接 P2P
    wslzy007
        12
    wslzy007  
    OP
       2020-02-06 10:53:38 +08:00
    @yulihao UDP 能穿透成功的( P2P ),TCP 都可以 P2P 的
    wslzy007
        13
    wslzy007  
    OP
       2020-02-06 10:54:44 +08:00
    @weyou 可以一起讨论一下安全问题
    CatCode
        14
    CatCode  
       2020-02-06 10:58:20 +08:00
    寻找 tcp 的内网穿透工具已经好久了。
    期待开源
    wslzy007
        15
    wslzy007  
    OP
       2020-02-06 11:13:06 +08:00
    @CatCode 如果受欢迎我是乐于开源的。没有用户基础的开源没意义,我的 excel 项目就是例子,当然或许酒香也怕巷子深
    tia
        16
    tia  
       2020-02-06 11:49:00 +08:00
    目前在用 zerotier 一切安好
    mm2x
        17
    mm2x  
       2020-02-06 12:35:58 +08:00
    这是广告帖子 老王卖瓜自卖自夸吧? 只支持证书 不支持 token ? 那我用 ngrok 多好,也不如 frpc 便利。感觉没有比这两个软件多什么东西。。。至于 ipv6 我都公网 IP 了还用穿透?
    wslzy007
        18
    wslzy007  
    OP
       2020-02-06 12:45:42 +08:00
    @mm2x 不夸,用了再说吧。免费工具开发不易,希望大家多做贡献。
    chengzi168
        19
    chengzi168  
       2020-02-06 14:04:57 +08:00 via Android
    @wslzy007 手机移动网络也能 P2P 穿透?不能的话,走你的公网 IP 中转?
    muzuiget
        20
    muzuiget  
       2020-02-06 14:36:38 +08:00
    @weyou 对,我看了好久才发现是文字游戏,还以为是什么高级技术,整套方案所有终端无需公网 IP,说明里有“官方提供免费的代理服务器”,搞半天其实就是 ssh -L/-R 能解决的事。
    cst4you
        21
    cst4you  
       2020-02-06 14:46:45 +08:00
    zerotier 用户表示直通才是最好的
    elfive
        22
    elfive  
       2020-02-06 15:15:18 +08:00 via iPhone
    其实,做贡献谈不上,重复造轮子,你这精力如果用在协助开发现有的开源项目,会更有意义。

    我是因为能力不够,力不从心,你有这能力,真的建议多参与开源项目。
    elfive
        23
    elfive  
       2020-02-06 15:16:34 +08:00 via iPhone
    我是这么认为的:开源社区的发展离不开广度,但深度更重要。
    wslzy007
        24
    wslzy007  
    OP
       2020-02-06 17:55:59 +08:00
    @muzuiget 建议试用一下再发表评论吧。。。
    wslzy007
        25
    wslzy007  
    OP
       2020-02-06 17:59:38 +08:00
    @elfive 谬赞了。其实只需要看看 github 上的交互图就很清楚是否重复造轮子了,作为一个技术工作者,对产出要求很苛刻
    brMu
        26
    brMu  
       2020-02-06 18:59:10 +08:00 via Android
    开源吧,不是有用户量才开源,是开源才有用户量
    zsxzy
        27
    zsxzy  
       2020-02-06 19:28:04 +08:00
    感谢, 正需要, 以前用 ddns 实现 ssh 连接办公室 server, 还需要路由器搞端口映射..
    ferstar
        28
    ferstar  
       2020-02-06 22:03:40 +08:00 via Android
    正在用,挺好的,提个意见,给 APP 加个退出的功能吧,每次都得划掉。。
    shynome
        29
    shynome  
       2020-02-06 22:47:51 +08:00 via Android
    tinc 有个 tcpOnly 选项开启就支持 tcp 了
    shynome
        30
    shynome  
       2020-02-06 22:49:10 +08:00 via Android
    CatCode
        31
    CatCode  
       2020-02-07 11:55:23 +08:00
    @shynome 我去看看
    mostkia
        32
    mostkia  
       2020-02-08 17:44:04 +08:00
    在服务器资源好的情况下,frp 真的香。
    zhhww57
        33
    zhhww57  
       2020-02-08 20:48:30 +08:00
    @weyou 可以,无需公网 ip 也可以,但是必须 udp,以前我也认为不可能,现在我知道了 udp 原来还能蒙端口,就是有个成功率,一般都是移动宽带同城基本能穿,只需要知道互相的公网 ip 就行了
    zhhww57
        34
    zhhww57  
       2020-02-08 20:57:06 +08:00   1
    @weyou 可以,无需公网 ip 也可以,但是必须 udp,以前我也认为不可能,现在我知道了 udp 原来还能蒙端口,就是有个成功率,一般都是移动宽带同城基本能穿,只需要知道互相的公网 ip 就行了
    @ljpCN 无须公网 ip 的 udp 穿透,服务端必须有 ddns,并且使用一个独特的暗语,然后服务端 udp 不停对外发包,这个包里面包含这个暗语,之后客户端,通过服务端的 ddns 解析到服务端的公网 ip,对这个公网 ip 的所有 udp 端口进行扫描,得到带有这个暗语的 udp 端口就是要连接的接口。再连接这个端口。。这个就是 udp 无公网 ip 穿透实现。至于 tcp。我还不太懂
    zhhww57
        35
    zhhww57  
       2020-02-08 21:07:28 +08:00
    无须公网 ip 的 udp 穿透
    前提:
    1、服务端必须有 ddns
    2、服务端使用一个(或多个)独特的暗语
    3、服务端通过一个(也可以多个) udp 端口不停对外发包,以此来保持到公网 ip 的一个(或者多个) udp 端口的开启
    4、如果这个端口接收到带有这个暗语消息,就会立即回复同样带有这个暗语的消息,



    过程:
    当服务端满足以上要求的时候,客户端通过以下办法通讯,

    1、客户端通过服务端的 ddns 解析到服务端的公网 ip
    2、对这个公网 ip 的所有 udp 端口进行发包扫描,所发的包里面必须带有服务端的暗语
    3、当得到回复,并且回复里面带有这个暗语,那么就意味着找到了端口
    4、和这个端口建立通讯
    flynaj
        36
    flynaj  
       2020-02-08 21:38:08 +08:00 via Android
    你这个还是转发,穿透还是只有那个 zerotier
    monkey110
        37
    monkey110  
       2020-02-08 21:58:44 +08:00
    不能 PC 到 PC ?
    weyou
        38
    weyou  
       2020-02-08 23:59:05 +08:00 via Android
    @zhhww57 我觉得这种方法只有对年代久远的 full cone 类型的 NAT 才有效,我不知道运营商的 NAT 是不是这种类型。

    对于家用路由器来说,现在绝大部分都是端口+地址限制型的 NAT。服务端在 NAT 后面向外发 UDP,对谁发? 如果不知道客户端地址而乱发的话,只有 UDP 的目的主机回的封包才能回得来,因为这种类型的 NAT 要求回来的包源地址和端口要与前面 UDP 的目的地址和端口一致才能通过。你用客户端扫描服务器的所有端口都没用, 都会被挡掉。

    如果双方都能事先获取对方的公网地址,确实可以靠端口扫描在一方先取得类似端口映射的效果,然后另外一端就可以用(对方扫描过的)任意端口连进来了。但一是效率很低,二是有被对方防火墙屏蔽的风险。
    weyou
        39
    weyou  
       2020-02-09 00:11:44 +08:00 via Android
    上面第二段修改下,如果双方都能事先获取对方的公网地址,确实可以靠端口扫描在一方先取得类似端口映射的效果,然后另外一端就可以再扫描对方的端口找到这个暗语。在确保连接概率的情况下,整个过程需要经历了 2 遍几乎全端口范围的扫描,很明显,这种方式一是效率很低,二是有被防火墙屏蔽的风险。
    tia
        40
    tia  
       2020-02-09 01:37:44 +08:00 via iPhone
    @weyou zerotier 很明显没有用这个方法,我搭了和国内 moon,然后两台无公网 nat 机器互相 ping 可以在 1 秒内互通,第一下几十毫秒后面稳定几毫秒,如果用扫端口猜的方式肯定没这么快
    weyou
        41
    weyou  
       2020-02-09 10:01:33 +08:00 via Android
    @tia 我还没见过这种方法被用在实际的应用中
    wslzy007
        42
    wslzy007  
    OP
       2020-02-09 12:56:34 +08:00
    @weyou 为啥要扫描端口?? smarGate 是一次性随机端口,协商时需要 token 认证,只需尝试一次就可以了,而且使用的是 TCP 协议进行 NAT 穿透,对于 NAT1-3 都有效。
    wslzy007
        43
    wslzy007  
    OP
       2020-02-09 12:58:49 +08:00
    @zhhww57 这种方式低效且不安全,可靠性差,demo 还行,实际的应用几乎没有使用这种流程进行 P2P 穿透的。
    wslzy007
        44
    wslzy007  
    OP
       2020-02-09 13:01:51 +08:00
    @flynaj 你自建代理服务器,就相当于 zt 的 moon。只要你的 NAT 类型允许,smarGate 可以直接 v4 P2P,v6 环境下可以直接穿透防火墙。否则走转发,详见官网交互图
    wslzy007
        45
    wslzy007  
    OP
       2020-02-09 13:03:27 +08:00
    @zhhww57 无需公网,指的是使用者不需要有公网 IP
    wslzy007
        46
    wslzy007  
    OP
       2020-02-09 13:10:51 +08:00
    @all smarGate 具备多链路聚合能力:首选 P2P 连接(使用 TCP 协议),无 P2P 时使用自定义代理连接,无前两者连接时使用官方代理连接。无需额外配置
    wslzy007
        47
    wslzy007  
    OP
       2020-02-09 13:15:10 +08:00
    smarGate 主要是考虑到“移动性”,电脑不好说,但手机都是随身携带的,实现“只要手机有网络的地方都能随时随地内网穿透”
    gfy0921
        48
    gfy0921  
       2020-02-09 15:04:32 +08:00
    @tia 请教下国内的 moon 怎么搭建,是不是可以改善跨电信联通这样的连接?
    tia
        49
    tia  
       2020-02-09 15:49:13 +08:00
    @gfy0921 #48 google 就有; zerotier 是 p2p
    gfy0921
        50
    gfy0921  
       2020-02-09 17:14:41 +08:00 via Android
    @tia 我知道是 p2p,但是比如用移动 4g 网连电信宽带,用官方服务器有时候是连不上的,据说要自建 moon 服务器
    tia
        51
    tia  
       2020-02-09 17:25:50 +08:00
    @gfy0921 #50 能否连上取决于两方客户端 NAT 类型,如果都是 full cone 的话没问题,我试过电信 4g 和电信无公网宽带就打洞成功了,其中电信 4G 因为是手机客户端只能用官方 moon 也成功了。moon 就是个握手服务器,假如客户端都是 fullcone 就能成功
    gfy0921
        52
    gfy0921  
       2020-02-09 17:38:24 +08:00 via Android
    @tia 那是因为都在电信的网里,这样我也行。但是一个在电信,一个不在电信就有可能失败
    tia
        53
    tia  
       2020-02-09 17:43:40 +08:00
    @gfy0921 #52 重点是电信是 fullcone,所以你测下你的 nat 啥类型
    wslzy007
        54
    wslzy007  
    OP
       2020-02-09 18:54:34 +08:00
    @tia @gfy0921 几大运营商移动网络 v4 基本都是 NAT4 的,4G 网络都有动态 V6 地址,家中宽带都能桥接得到 v6 地址,因此使用 smarGate 直接 v6 防火墙穿透,成功率 100%。
    lazygod
        55
    lazygod  
       2020-02-10 01:15:56 +08:00 via Android
    留眼

    lazyliu
    lazygod
    哈哈哈哈哈哈哈
    youstu
        56
    youstu  
       2020-02-15 16:46:23 +08:00
    @v66ex 试了下 KSA,很好用
    droidmax61
        57
    droidmax61  
       2020-09-18 00:32:32 +08:00 via Android
    KSA 是 FCN 的阉割版,另外 SmarGate 和 FCN 相比优缺点都有些啥?
    wslzy007
        58
    wslzy007  
    OP
       2020-09-18 09:30:44 +08:00
    @droidmax61
    内网穿透分为两种技术路线:
    1 、类 vpn 技术( tap/tun 虚拟网卡实现),网络二层打通
    2 、端口映射类。子网不通,通过映射端口访问内网特定服务。端口映射目前主流分两种:
    a 、内网端口映射到外网 IP:port,典型的是 frp/ngrok 等工具
    b 、专注于“内网”--》“内网”的映射,公网没有任何访问入口,SG 采用的方式
    优缺点,谈不上。主要是使用的场景是否适合自己
    thegodofoxeris
        59
    thegodofoxeris  
       2021-01-12 11:00:38 +08:00
    @wslzy007 你的 excel 项目看起来还不够方便- -
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2307 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 15:54 PVG 23:54 LAX 07:54 JFK 10:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86