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

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

  •  
  •   xubingok · 78 天前 · 2686 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    @xubingok
    不高端啊,和你得用法一样,你只要在你的 vps 上面设置 443 绑定到你内网机器得非 443 端口就可以了啊
    不如你设置 vps 得 443 绑定到你内网某个机器得 3389 端口,这样你在 rdp 客户端设置连接得地址为 '公网 ip:443‘就可以了啊。
    gps949
        10
    gps949  
       78 天前
    @xubingok
    云桌面。。。那连 sase 都不用了。要我就懒得折腾了
    如果没 sase (即从外部能正确判断公司出口 ip 原路回源)的话,可以尝试下 tailscale ,但就算能通多半也是走 derp 中转的。
    如果它也不行,就得看你具体需求和情况,具体问题具体分析了,比如看是外面随处连公司还是公司连家里之类的。
    cutepig
        11
    cutepig  
       78 天前 via Android
    https://github.com/jpillora/chisel
    这个应该可以,到但有机会被防毒软件报误报
    zhqiang
        12
    zhqiang  
       78 天前
    @xubingok 你的意思是你要在公网通过内网穿透访问你公司内部得某台机子?如果这样要看你们公司得防火墙策略了。这个我没有试验过。
    我们公司是浏览网页都没有问题,但是我想 ssh 连接外网,只能走 443/80 ,所有其他端口包括 ssh 都关闭了。所以我在公司想管理我得 vps ,除非是供应商提供了 webssh ,否则我只能回家搞。
    目前我是家里开了一台 linux ,通过 frp 443 绑定到家里得 linux 得 ssh server 得端口来连接到家里,然后通过家里得 liunx 在 ssh 到公网得 vps ,管理所有得 vps
    yolee599
        13
    yolee599  
       78 天前 via Android
    这个应该让运维解决吧,除非你就是运维,直接问客服
    sujin190
        14
    sujin190  
       78 天前
    都只开放 80/443 了,说不定还开着流量分析和上网行为分析,小心被抓啊,看起来老板挺看重这种行为的,别搞出个”大事“来,2333~
    greatbody
        15
    greatbody  
       78 天前 via Android
    建议自备电脑,用手机流量共享 WiFi 上网。否则可能被公司开除。
    xubingok
        16
    xubingok  
    OP
       78 天前
    @cpstar 需求场景就是,我们干活在一台内网机器上面.但是这个机器用起来非常不爽.我想在外网的笔记本上干活,需要能从外网访问某些内网才能访问的系统,比如 gitlab,后端接口之类的.
    之前的方式就是公网 vps 安装一台 nps 服务端,然后内网机器执行 nps 客户端,连上以后,就可以把公网 vps 当做代理,从外网访问内网各种系统了.
    xubingok
        17
    xubingok  
    OP
       78 天前
    @lqw3030 唉...这个风险我非常清楚.但是综合我的工作内容涉密程度,以及外网干活带来的效率提升,我愿意承担这个风险.
    xubingok
        18
    xubingok  
    OP
       78 天前
    @zhqiang 我内网机器连公网 ip 都没有...咋可能把外网 vps 接口绑定到内网 3389 端口啊..而且防火墙估计也不会允许内网机器的 3389 可以被外网连上吧.
    xubingok
        19
    xubingok  
    OP
       78 天前
    @gps949 谢谢.这个 sase 啥的我不太懂.
    不过需求场景就是外面随处连公司.在云桌面干活太难了.
    cpstar
        20
    cpstar  
       78 天前
    OP 36# 哦,这么说,就正了。公网 frps 开 80/443 端口,内网 frpc 访问 frps 的 80/443 ,nps 类似。但是如果你们的设备检测协议即 http/https 内容的话,那就不行了——如 6#所述。
    再者就是 14#说的问题,如果上了行为分析,那必然会检测协议内容,上述方法无效。
    xubingok
        21
    xubingok  
    OP
       78 天前
    @cutepig 谢谢.我先瞧瞧.
    luny
        23
    luny  
       78 天前
    不建议折腾了,这是挑战公司红线的做法,后果比较严重
    exqibao
        24
    exqibao  
       78 天前
    如果没理解错的话,是公司向外访问,目标端口只允许 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  
       78 天前
    建议换公司。不要干公司严令禁止的事。没必要。
    Seanfuck
        26
    Seanfuck  
       77 天前
    可以自己开发一个
    EIJAM
        27
    EIJAM  
       77 天前 via iPhone
    云桌面一般不是都提供了互联网接入么,完全可以在自己的笔记本上开云桌面(笔记本走手机热点),剪贴板是共享的。
    ysc3839
        28
    ysc3839  
       77 天前
    标准的 http 不行,因为发送请求后只能单向接收,http proxy connect 可以。
    phiysng
        29
    phiysng  
       77 天前
    楼上 HTTP CONNECT 正解,可以用七层协议传输 4 层的 TCP 数据
    systemcall
        30
    systemcall  
       77 天前
    开一个 trojan vmess vless 之类的,配置好伪装,只要没有 mitm 就基本上没法检测
    要是公司会通过自签证书解密 HTTPS 流量,那什么伪装都是白瞎了,因为肯定还有别的监控
    recall704
        31
    recall704  
       77 天前 via iPhone
    gost ?
    mikewang
        32
    mikewang  
       77 天前
    首先,建议遵守安全规定。
    不过针对问题回答,可以 ping 通,就可以使用 icmp 隧道。使用 HTTP 的 Neo-reGeorg 也可以,不过个人觉得效率不是很高。十多年前的 GoAgent 也是基于 HTTP 的,那个时候还使用的是自签名证书。通过隧道后再 FRP 。
    xubingok
        33
    xubingok  
    OP
       76 天前
    @exqibao 感谢回复.大概看懂了.就是用 443 端口拿给之前的 frp/nps 之类的用.毕竟内网机器不会连 443 都封.我先试试吧,再次感谢.
    xubingok
        34
    xubingok  
    OP
       76 天前
    @EIJAM 剪贴板共享也没啥用啊.之前还可以从笔记本向云桌面复制简单文本..某次更新后,剪贴板都不能共享了.
    gujigujij
        35
    gujigujij  
       71 天前
    刚写完,基于 websocket 的,github: aHR0cHM6Ly9naXRodWIuY29tL3NhemltYS9uYXRfdHJhdmVyc2Fs
    xubingok
        36
    xubingok  
    OP
       71 天前
    @gujigujij 卧槽.大佬感谢啊.我也想着实在不行用 socket 搞一个算了,公司总不能连 socket 都屏蔽吧.
    只是 http 相关知识我是一片盲区,没想到大佬已经整出来了.
    我这就去试试,感谢大佬~
    xubingok
        37
    xubingok  
    OP
       68 天前
    @gujigujij 已试用.技术上是可行的.ws 超时时间 3s 还是短了点.用于实践的话还有些问题:
    1.内网 https 的页面好像配置上去不行,不知道 config 文件是否支持域名.
    2.用着用着 ws 就断了,可能需要一些重连机制.

    技术可行,继续寻求方案的动力又有了哈哈
    gujigujij
        38
    gujigujij  
       68 天前
    @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
       57 天前
    @gujigujij 再次感谢.目前已经全部搞定了.唯一的那个 issue 是我提的哈哈.虽说是个小问题,大佬还是很用心的优化了~

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

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