V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
devliu1
V2EX  ›  程序员

挂代理与不挂代理如何做到无缝切换(非 http)

  •  
  •   devliu1 · 2021-10-15 17:13:23 +08:00 · 4840 次点击
    这是一个创建于 895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我有 ssh 服务,内网是 10.0.0.1:22,通过域名 example.com 访问。 我希望在外网的时候 也可以通过域名 example.com 访问到。 路由器自己解析是可以的,但是外网访问端口和内网端口必须保持一致,有点麻烦,有什么好的类似 PAC 的本地全局代理吗?

    21 条回复    2021-10-18 20:37:41 +08:00
    dcty
        1
    dcty  
       2021-10-15 17:19:09 +08:00
    如果你用的是 Mac,那么用 surge 可以解决。dns 解析可以用脚本实现,判断当前网络来返回域名对应的 IP 。
    wweir
        2
    wweir  
       2021-10-15 18:11:15 +08:00   ❤️ 3
    写个 hosts 文件不好么
    IvanLi127
        3
    IvanLi127  
       2021-10-15 18:41:46 +08:00 via Android
    只要你有公网 ip 端口没被阻断,好像只要网关把所有端口转发给你的内网服务就好了?内网再开个 dns 服务,网关再设其为默认 dns 服务器,应该能满足吧?
    starsky007
        4
    starsky007  
       2021-10-15 18:57:26 +08:00 via Android
    Tailscale
    z7356995
        5
    z7356995  
       2021-10-15 19:09:04 +08:00 via Android
    ipv6 内外网都一样
    cweijan
        6
    cweijan  
       2021-10-15 19:36:33 +08:00
    就是异地组网嘛, 想快速体验可以用国产的蒲公英, 其他免费的有 Tailscale 、zerotier, 自建则可用 WireGuard
    devliu1
        7
    devliu1  
    OP
       2021-10-15 19:36:42 +08:00
    @dcty 我觉得是正解,能完美解决需求,我要的应该是 programmable 全局代理工具

    @wweir hosts 与我自建 dns 没区别呀

    @IvanLi127 问题就是公网被阻断了,(所以端口不够用,这才是主要问题!!!)不然网关侧就可以解决这个问题。

    @starsky007 这个看着是类似 zerotier 的服务吗?我研究一下

    @z7356995 学习了,但是公网没有 v6
    devliu1
        8
    devliu1  
    OP
       2021-10-15 19:44:03 +08:00
    @cweijan 对,其实就是想要一个可以自动适应网络环境的 VPN,如果已经在内网就走内网流量
    Xusually
        9
    Xusually  
       2021-10-15 23:31:28 +08:00 via iPhone
    Surge
    mMartin
        10
    mMartin  
       2021-10-16 10:56:31 +08:00
    软路由可以设置 dns 代理 比如爱快的 dns 反向代理功能
    cache
        11
    cache  
       2021-10-16 11:57:35 +08:00
    @devliu1 Tailscale 就是你要的自动适应网络环境的 VPN,内网时直连,外网如果打洞成功也能直连,否则走中转。
    缺点是 Tailscale 的服务器在国外,中转会很慢。

    你如果只是端口不够,其实还有一个简单的解决方案:直接复用已经映射好的端口,如 443.

    你要编程实现的话,每条新来的连接检测一下第一个包的起始几个字节,如果是 ssh 转内网的 ssh 服务器,如果是 tls 包,转原来的 https 服务。
    devliu1
        12
    devliu1  
    OP
       2021-10-16 16:20:16 +08:00
    @cache 测试了一下 Tailscale 还是慢了,自己编程实现感觉可以设置全局的 socks 代理,然后代理逻辑自己魔改一下?

    @mMartin 主要还是端口不够用,本地 DNS 解析是好做的,想在 4 层做自定义的转发
    devliu1
        13
    devliu1  
    OP
       2021-10-16 16:25:14 +08:00
    好像最方便的方式还是多买一个公网 IP 。
    每个服务占用一个 IP 的固定端口,在本地 DNS 把公网域名解析到本地。

    如果是 https 还可以通过 host 转发给不同的服务。
    zhfish
        14
    zhfish  
       2021-10-16 22:03:12 +08:00
    这么麻烦? 内网上一个软路由,dns 里面 10.0.0.1 example.com 不就行了。。
    连上内网走路由 dns, 外网走公网 dns
    zhfish
        15
    zhfish  
       2021-10-16 22:04:11 +08:00
    端口一致为什么麻烦,这个没太理解
    devliu1
        16
    devliu1  
    OP
       2021-10-17 10:30:56 +08:00
    @zhfish 举个反例,内网两个 ssh 192.168.1.1:22 、192.168.1.2:22 。但只有一个公网 ip,可以映射 1.1.1.1:22 -> 192.168.1.1:22,但是要映射 192.168.1.2:22 的时候,端口不够了,本质还是公网 ip 少了。
    orancho
        17
    orancho  
       2021-10-17 16:13:02 +08:00
    你要找的是不是 MAAS 或者 ActiveDirectory 的 DNS ?
    FakNoCNName
        18
    FakNoCNName  
       2021-10-18 10:29:39 +08:00
    你这个需求弄个跳板机最简单,路由器 22 断口映射到跳板机上,其它的全部通过跳板机转发
    yhan
        19
    yhan  
       2021-10-18 13:46:10 +08:00
    试试 proxifier
    devliu1
        20
    devliu1  
    OP
       2021-10-18 14:13:08 +08:00
    @FakNoCNName 是这样的,似乎懂了,我要的就是跳板机能自适应网络环境,按照我之前的方案,这样一个端口就行。
    @orancho 没懂

    @yhan 好像也可以,感谢
    FakNoCNName
        21
    FakNoCNName  
       2021-10-18 20:37:41 +08:00   ❤️ 1
    @devliu1 只要路由能通,跳板机会自己转发,只要配置对了就可以,你看下 ssh 跳板机的资料,里面有这种用法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:35 · PVG 20:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.