V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xubingok
V2EX  ›  问与答

有没有基于 http 的内网穿透技术?

  •  
  •   xubingok · 2022-09-21 08:12:37 +08:00 · 3841 次点击
    这是一个创建于 554 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司的互联网访问策略异常的严格(据说用的深信服),之前还能用 nps 的.某次升级后就连不上了. 从内网 ping 外网没问题,上网也没问题,但是各种指定端口的 tcp 都连不上.ssh 也无法使用. 感觉从内向外只放开了 80 和 443 端口?

    这种情况下,还能实现内网穿透么?

    39 条回复    2022-10-12 09:36:22 +08:00
    IvanLi127
        1
    IvanLi127  
       2022-09-21 08:15:23 +08:00 via Android
    xray
    zhqiang
        2
    zhqiang  
       2022-09-21 08:19:12 +08:00
    没用过 nps ,但是感觉和 frp 应该差不了太多
    公司也是封端口,只开放 80/443
    使用 frp ,直接使用 443 端口映射到内网的 ssh 或者其他端口。
    缺点一个公网 ip ( vps )只能映射两个端口,要是在想访问内网其他更多服务就比较麻烦了,没有那么多有公网 ip 得 vps
    gps949
        3
    gps949  
       2022-09-21 08:24:04 +08:00
    本来一般也是靠 udp 穿透更靠谱,你说 tcp 连不上,udp 呢?
    不过如果是深信服的 sase 可能比较难办,因为它实际上是所有流量先到它的 pop 节点,再统一由 pop 节点出去。你可以测试下用 ip 检测网站检测下你自己的公网 ip ,是不是和公司的出口 ip 不一样了(会变成它 pop 节点的 ip )。
    据说深信服这玩意似乎绑定 mac ?好像虚拟机也搞不定?你可以尝试下修改网卡 mac 或者在桥接网络的虚拟机里连下试试。
    xubingok
        4
    xubingok  
    OP
       2022-09-21 08:28:38 +08:00
    @gps949 害.我们办公用的云桌面.我内网的机器实际上就是一台虚拟机.至于查看 ip 这个.我在 ip138 之类的网站倒是能看到自己的公网 ip.但是公司的出口 ip 不知道怎么查啊..
    xubingok
        5
    xubingok  
    OP
       2022-09-21 08:32:24 +08:00
    @zhqiang 你说的略高端,有点听不懂..
    我感觉所谓的内网穿透,应该都是内网机器连接上外网的一台服务器(我在腾讯云有这样的 vps,有公网 ip).然后外网其他机器就可以通过这个跳板访问内网各种系统了.
    现在就是内网使用 80/443 以外的端口都连不上外网机器.
    但是做开发的时候发现用于 mqtt 的 websocket 似乎又能连上,一时之间也搞不清楚这个防火墙策略了...
    cpstar
        6
    cpstar  
       2022-09-21 08:33:09 +08:00
    难道还有协议检测?把 frp 的端口绑到 80/443 上行不?
    cpstar
        7
    cpstar  
       2022-09-21 08:36:21 +08:00
    不对,反了,你这个是要内网往外穿,内网访问外边的非 80/443 。那不是内网穿透,然后把内网的用某种方法放到内网墙外,绕开墙上的 80 、443 限制。
    lqw3030
        8
    lqw3030  
       2022-09-21 08:42:31 +08:00
    是不是应该先考虑下为什么"公司的互联网访问策略异常的严格",V 站因穿网引发安全事件案例数不胜数了
    zhqiang
        9
    zhqiang  
       2022-09-21 08:49:12 +08:00
    没用过 nps ,但是感觉和 frp 应该差不了太多
    公司也是封端口,只开放 80/443
    使用 frp ,直接使用 443 端口映射到内网的 ssh 或者其他端口。
    缺点一个公网 ip ( vps )只能映射两个端口,要是在想访问内网其他更多服务就比较麻烦了,没有那么多有公网 ip 得 vps

    @xubingok
    不高端啊,和你得用法一样,你只要在你的 vps 上面设置 443 绑定到你内网机器得非 443 端口就可以了啊
    不如你设置 vps 得 443 绑定到你内网某个机器得 3389 端口,这样你在 rdp 客户端设置连接得地址为 '公网 ip:443‘就可以了啊。
    gps949
        10
    gps949  
       2022-09-21 08:50:07 +08:00
    @xubingok
    云桌面。。。那连 sase 都不用了。要我就懒得折腾了
    如果没 sase (即从外部能正确判断公司出口 ip 原路回源)的话,可以尝试下 tailscale ,但就算能通多半也是走 derp 中转的。
    如果它也不行,就得看你具体需求和情况,具体问题具体分析了,比如看是外面随处连公司还是公司连家里之类的。
    cutepig
        11
    cutepig  
       2022-09-21 08:54:17 +08:00 via Android
    https://github.com/jpillora/chisel
    这个应该可以,到但有机会被防毒软件报误报
    zhqiang
        12
    zhqiang  
       2022-09-21 08:55:34 +08:00
    @xubingok 你的意思是你要在公网通过内网穿透访问你公司内部得某台机子?如果这样要看你们公司得防火墙策略了。这个我没有试验过。
    我们公司是浏览网页都没有问题,但是我想 ssh 连接外网,只能走 443/80 ,所有其他端口包括 ssh 都关闭了。所以我在公司想管理我得 vps ,除非是供应商提供了 webssh ,否则我只能回家搞。
    目前我是家里开了一台 linux ,通过 frp 443 绑定到家里得 linux 得 ssh server 得端口来连接到家里,然后通过家里得 liunx 在 ssh 到公网得 vps ,管理所有得 vps
    yolee599
        13
    yolee599  
       2022-09-21 09:03:52 +08:00 via Android
    这个应该让运维解决吧,除非你就是运维,直接问客服
    sujin190
        14
    sujin190  
       2022-09-21 09:40:43 +08:00
    都只开放 80/443 了,说不定还开着流量分析和上网行为分析,小心被抓啊,看起来老板挺看重这种行为的,别搞出个”大事“来,2333~
    greatbody
        15
    greatbody  
       2022-09-21 09:41:14 +08:00 via Android
    建议自备电脑,用手机流量共享 WiFi 上网。否则可能被公司开除。
    xubingok
        16
    xubingok  
    OP
       2022-09-21 09:43:04 +08:00
    @cpstar 需求场景就是,我们干活在一台内网机器上面.但是这个机器用起来非常不爽.我想在外网的笔记本上干活,需要能从外网访问某些内网才能访问的系统,比如 gitlab,后端接口之类的.
    之前的方式就是公网 vps 安装一台 nps 服务端,然后内网机器执行 nps 客户端,连上以后,就可以把公网 vps 当做代理,从外网访问内网各种系统了.
    xubingok
        17
    xubingok  
    OP
       2022-09-21 09:44:05 +08:00
    @lqw3030 唉...这个风险我非常清楚.但是综合我的工作内容涉密程度,以及外网干活带来的效率提升,我愿意承担这个风险.
    xubingok
        18
    xubingok  
    OP
       2022-09-21 09:45:12 +08:00
    @zhqiang 我内网机器连公网 ip 都没有...咋可能把外网 vps 接口绑定到内网 3389 端口啊..而且防火墙估计也不会允许内网机器的 3389 可以被外网连上吧.
    xubingok
        19
    xubingok  
    OP
       2022-09-21 09:48:28 +08:00
    @gps949 谢谢.这个 sase 啥的我不太懂.
    不过需求场景就是外面随处连公司.在云桌面干活太难了.
    cpstar
        20
    cpstar  
       2022-09-21 09:49:23 +08:00
    OP 36# 哦,这么说,就正了。公网 frps 开 80/443 端口,内网 frpc 访问 frps 的 80/443 ,nps 类似。但是如果你们的设备检测协议即 http/https 内容的话,那就不行了——如 6#所述。
    再者就是 14#说的问题,如果上了行为分析,那必然会检测协议内容,上述方法无效。
    xubingok
        21
    xubingok  
    OP
       2022-09-21 09:49:30 +08:00
    @cutepig 谢谢.我先瞧瞧.
    dogking2
        22
    dogking2  
       2022-09-21 10:06:14 +08:00
    luny
        23
    luny  
       2022-09-21 10:28:39 +08:00
    不建议折腾了,这是挑战公司红线的做法,后果比较严重
    exqibao
        24
    exqibao  
       2022-09-21 11:09:34 +08:00
    如果没理解错的话,是公司向外访问,目标端口只允许 80 或 443 。

    1.内网电脑搭 shadowsocks 服务的,端口 12345 ;
    2.内网电脑起 frp 客户端,通过公网 vps ,把公网 443 端口转到内网 12345 端口;
    3.公司电脑使用 shadowsocks 客户端,连接公网 443 端口,建立本地 socks5 代理,端口 1080 ;

    之后,所有服务都通过本地 1080 端口代理访问,如果部分软件不支持设置代理,可以先使用 nadoo/glider 工具打洞,glider -listen tcp://:22 -forward socks5://localhost:1080,tcp://内网 ip:22 。

    也可以不用 shadowsocks 之类的,直接内网建 socks5 代理服务,暴露到公网 443 端口上,只是不太安全。

    如果有 https 协议分析的话,把 shadowsocks 服务换成 trojan 的。
    weixind
        25
    weixind  
       2022-09-21 11:31:34 +08:00
    建议换公司。不要干公司严令禁止的事。没必要。
    Seanfuck
        26
    Seanfuck  
       2022-09-21 12:09:35 +08:00
    可以自己开发一个
    EIJAM
        27
    EIJAM  
       2022-09-21 12:19:17 +08:00 via iPhone
    云桌面一般不是都提供了互联网接入么,完全可以在自己的笔记本上开云桌面(笔记本走手机热点),剪贴板是共享的。
    ysc3839
        28
    ysc3839  
       2022-09-21 12:43:25 +08:00
    标准的 http 不行,因为发送请求后只能单向接收,http proxy connect 可以。
    phiysng
        29
    phiysng  
       2022-09-21 12:56:23 +08:00
    楼上 HTTP CONNECT 正解,可以用七层协议传输 4 层的 TCP 数据
    systemcall
        30
    systemcall  
       2022-09-21 12:57:08 +08:00
    开一个 trojan vmess vless 之类的,配置好伪装,只要没有 mitm 就基本上没法检测
    要是公司会通过自签证书解密 HTTPS 流量,那什么伪装都是白瞎了,因为肯定还有别的监控
    recall704
        31
    recall704  
       2022-09-21 13:05:23 +08:00 via iPhone
    gost ?
    mikewang
        32
    mikewang  
       2022-09-22 02:07:11 +08:00
    首先,建议遵守安全规定。
    不过针对问题回答,可以 ping 通,就可以使用 icmp 隧道。使用 HTTP 的 Neo-reGeorg 也可以,不过个人觉得效率不是很高。十多年前的 GoAgent 也是基于 HTTP 的,那个时候还使用的是自签名证书。通过隧道后再 FRP 。
    xubingok
        33
    xubingok  
    OP
       2022-09-23 09:19:43 +08:00
    @exqibao 感谢回复.大概看懂了.就是用 443 端口拿给之前的 frp/nps 之类的用.毕竟内网机器不会连 443 都封.我先试试吧,再次感谢.
    xubingok
        34
    xubingok  
    OP
       2022-09-23 09:22:44 +08:00
    @EIJAM 剪贴板共享也没啥用啊.之前还可以从笔记本向云桌面复制简单文本..某次更新后,剪贴板都不能共享了.
    gujigujij
        35
    gujigujij  
       2022-09-27 18:17:32 +08:00
    刚写完,基于 websocket 的,github: aHR0cHM6Ly9naXRodWIuY29tL3NhemltYS9uYXRfdHJhdmVyc2Fs
    xubingok
        36
    xubingok  
    OP
       2022-09-28 10:50:32 +08:00
    @gujigujij 卧槽.大佬感谢啊.我也想着实在不行用 socket 搞一个算了,公司总不能连 socket 都屏蔽吧.
    只是 http 相关知识我是一片盲区,没想到大佬已经整出来了.
    我这就去试试,感谢大佬~
    xubingok
        37
    xubingok  
    OP
       2022-09-30 16:24:20 +08:00
    @gujigujij 已试用.技术上是可行的.ws 超时时间 3s 还是短了点.用于实践的话还有些问题:
    1.内网 https 的页面好像配置上去不行,不知道 config 文件是否支持域名.
    2.用着用着 ws 就断了,可能需要一些重连机制.

    技术可行,继续寻求方案的动力又有了哈哈
    gujigujij
        38
    gujigujij  
       2022-09-30 19:00:22 +08:00
    @xubingok 域名和 https 配置类似这样. 公网 https 测过, 内网没有测试.

    ```
    {
    "server": {
    "port": 11111,
    "host": "t.xxxx.coxm",
    "https": true,
    "password": "helloworld",
    "path": "/websocket_path"
    },
    "client": [
    {
    "name": "ssh",
    "remote_port": 1222,
    "local_port": 22,
    "local_ip": "127.0.0.1"
    } ]
    }

    ```

    重连不知道稳不稳定, 刚开始写后来又 push 了好几次代码, 我需要再测测.
    xubingok
        39
    xubingok  
    OP
       2022-10-12 09:36:22 +08:00
    @gujigujij 再次感谢.目前已经全部搞定了.唯一的那个 issue 是我提的哈哈.虽说是个小问题,大佬还是很用心的优化了~

    整体方案就是:
    1.用大佬的工具,websocket 怼上去,把本机 ssh 端口映射到外网.
    2.在外网机器用 ssh -D 做动态转发,就拥有了一个 socks5 代理.
    3.然后就可以愉快的玩耍了.

    很奇怪的是,这种方式居然没有被防火墙拦截...(希望不要被我司 IT 看到..)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2713 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 15:43 · PVG 23:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.