V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jdjingdian
V2EX  ›  宽带症候群

魔改 OpenVPN3 支持 SRV,配合打洞连回家

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

    前段时间我的公网 IP 掉了,也引起了大伙的讨论。我懒得跟运营商继续扯皮,所以想自己折腾折腾,用打洞的方式连回家。

    首先要感谢 @mikewang @heiher @gdy666 几位大佬提供的 TCP 打洞的程序,不然我可能就只能选择 frp 之类中转的方案了,个人还是比较倾向于直连。

    家里 HTTP 的服务通过 302 跳转访问,基本没什么痛点。SSH 连接借鉴的的是 natmap 项目中提出的方案——使用 NATMap 在 NAT-1 私网 IP 宽带上部署 SSH 服务,但是我选择将端口信息保存到 TXT 记录中,个人觉得更方便一点。

    唯一比较难受的是,以前有公网 IP 的时候,可以直接用 VPN 连回家里,这样干活(摸鱼)能方便点,但是公网 IP 掉了以后,我就没办法连回家里内网了。

    一开始我是想找有没有类似实现的 VPN ,但似乎没找到,因为我原来用的就是 OpenVPN ,服务端是 Mikrotik 自带的,索性就尝试魔改了一下 OpenVPN 客户端,调研后我选择魔改 OpenVPN 3 这个库,看起来挺多 UI 客户端都依赖这个库。

    我修改的方法大概是这样的,需要 ovpn 配置文件中添加一行记录

    remote-srv _openvpn._tcp.yourdomain.com
    

    OpenVPN 3 启动时需要读取 ovpn 配置,如果发现有remote-srv字段的配置,就会尝试解析 SRV 记录,获取到对应的端口号后,自动覆盖掉端口号的配置。

    由于要解析 SRV 记录,所以引入了 ldns 库,现在想想,可能利用 IP4P 格式的记录做解析可能更方便,还不用引入其他库,不过我都写完了才想起来,就懒得改了

    本身这是一个核心库,但是它本身带了一个 cli 程序,编译完后用 cli 命令连接即可,我偷懒就没弄 GUI 了(我是废物

    这个图是我在公司网络用 cli 连回 Mikrotik 管理页面的截图

    仓库地址在这,欢迎大佬尝试使用,如果 readme 写的不清晰或者有问题,也欢迎提 issue: https://github.com/jdjingdian/openvpn3_srv

    第 1 条附言  ·  157 天前
    再分享一个打洞+SRV 记录的用法

    你可以在内网部署一个 KMS 激活服务器

    正常情况 KMS 激活需要访问 1688 端口,但是微软支持使用 SRV 记录,你可以在 DNS 后台创建两个域名

    A 记录的 direct.example.com 和 SRV 记录的 _vlmcs._tcp.direct.example.com

    SRV 记录填写为 5 0 端口号 direct.example.com ,打洞成功后,将 IP 同步到 direct 域名,将端口号更新到 SRV 域名

    在要激活的设备上,以管理员权限运行

    slmgr /skms-domain direct.example.com ,配置了这行后,kms 会自动搜寻这个域名带_vlmcs._tcp.zh 前缀的记录,如果能找到,就根据这个 srv 记录指向的端口和 hostname 进程激活流程
    11 条回复    2025-01-12 14:28:23 +08:00
    asilin
        3
    asilin  
       157 天前
    很赞,无论是 remote-srv 还是 remote-ip4p 都是很好的创意!

    但是有一个小建议:OpenVPN 3 在服务器上面用的比较少,大部分发行版的源都是 OpenVPN 2.x 版本,如果能支持 2.x 版本就更好了!
    jdjingdian
        4
    jdjingdian  
    OP
       157 天前
    @asilin 在 openvpn3 仓库有一段介绍

    ```
    OpenVPN 3 is a C++ class library that implements the functionality of an OpenVPN client, and is protocol-compatible with the OpenVPN 2.x branch.
    ```

    所以理论上来说,我魔改的这个库只是针对客户端的,而且这个东西也兼容 2.x 的版本,服务端是 2.x 的话也可以用我这个,因为我这个改动只是连接前更新了一下端口信息,没有改其他 openvpn 的逻辑
    godmiracle
        5
    godmiracle  
       156 天前
    学习下,最近电信换了移动公网 ip 也无了
    MFWT
        6
    MFWT  
       156 天前
    我也在考虑 SRV 相关的东西,不过我的侧重点是 WireGuard ,毕竟 OpenVPN 对我来说好像还是有点太重了

    顺带一提另一个的话,AnyConnect 可以做到动态跳转(访问地址可以 302 到真实地址),不过直接访问端口的话会有 HTTP 内容出现,我怕运营商会因此找借口,所以不太敢用
    Jhma
        7
    Jhma  
       156 天前
    有 V6 就很简单,V6 DDNS openvpn 连回家,我现在连回家后串流局域网的 PS5 很顺畅
    jdjingdian
        8
    jdjingdian  
    OP
       156 天前 via iPhone
    @Jhma v6 我家有,但是问题是公司的网络没有,我又不想用自己的手机流量连回家,所以只能想办法 v4 打洞啦🥵
    funnypc
        9
    funnypc  
       149 天前
    TXT 记录的更新是怎么做的呢?需要自己去写个脚本?

    希望还是能改个 IP4P 版本的,这样可以直接使用 natmap
    Xemember
        10
    Xemember  
       130 天前 via iPhone
    我努力看了半天…确实没看懂…缺少相关知识…
    funnypc
        11
    funnypc  
       10 天前
    不管是 dns srv 还是 ip4p

    现在没有什么可用的移动端方案

    wg 因为走 udp ,所以没法用

    其它都是 win 端或者 CLI ,用脚本或终端当然都没问题

    但是没有易用的带 GUI 的移动端
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:19 · PVG 06:19 · LAX 14:19 · JFK 17:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.