Featured image of post 改进了一下 luci-app-natmap,让无公网 IP 访问家中服务器、PT 做种、组网回家等等轻松实现

改进了一下 luci-app-natmap,让无公网 IP 访问家中服务器、PT 做种、组网回家等等轻松实现

https://unsplash.com/photos/sxtgi626e60

前景提要,natter 可以 TCP “打洞” https://www.v2ex.com/t/879549

打洞需要 FullCone(NAT1)

NATMap 是 natter 的 C 语言 port

luci-app-natmap 是 NATMap 的 luci 界面,主要用来配置 NATMap

原来的 luci-app-natmap 功能比较简单,所有功能都需要通过通知脚本来实现,考虑到有小伙伴并不会写脚本又有这方面的需求,而 NATMap 又有几个典型的应用场景,就把这几个使用场景内置到了 NATMap OpenWrt 版的中,需要配置对应功能使用的小伙伴可以只填入必要的配置信息即可,介绍一下几种典型应用吧

配合 qBittorrent/Transmission 实现无公网 IP 做种

https://github.com/Mythologyli/qBittorrent-NAT-TCP-Hole-Punching 启发,通过将 qBittorrent 的端口改成打洞后得到的端口,使 tracker 上报的端口和 IP 和实际能接受入站流量的端口一致,拿得其他节点可以正常连上自己的做种软件,达到拔号拿不到公网 IP 的情况下依然可以做种

使用 luci-app-natmap 配置

注意转发端口应该填写 0 ,因为 qBittorrent 端口会在打洞成功后被修改,填 0 后,会配置流量转发到修改后的端口

配合 Emby Connect 实现无公网 IP 随时随地连接家中的 Emby 服务器

使用 NATMap 打洞后就可以通过公网 IP 加运营商分配的端口来连接了,因为端口是变的,在用 Emby 的时候如果端口变了就要重新输入,体验就会很差,还好 Emby 有 提供一个 Emby Connect 服务,其作用有点类似 DDNS ,在 Emby 服务器上将账号和 Emby Connect 账号关联起来,客户端通过 Connect 账户登录,连接服务器时可以通过 Connect 服务器获得最新的地址和端口以用于连接,这样即使端口变了,客户端也是无感的,打开就能连上,体验和有公网 IP 基本相当

Emby 后台配置,在网络下,配置端口号和地址,地址通常会使用 DDNS 的域名,这个看自己吧

然后在 luci-app-natmap 中配置 Emby 地址和 API key 即可,端口变化后会通过 API 配置外网端口号,API 调用完成后最新的端口号就会被更新到 Connect 的服务器 https://emby.media/community/index.php?/topic/116636-what-will-do-when-client-apps-get-307-response-code/&do=findComment&comment=1233694

API Key 可以在 Emby 后台拿到

luci-app-natmap 配置

配合 Trojan/Shadowsocks 等等实现异地组网回家

这个使用场景主要解决代理客户端如 Surge/Stash 等怎么拿到最新的端口号的问题,我的博客文章有详细的介绍

https://imciel.com/2023/04/07/connect-to-home-without-public-ipv4/

简单来讲就是在端口号更新时通过 Surgio 更新 Proxy Provider 并在客户端配置一个定时更新,基本上也就无感知了,可以随时随地「回家」了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
proxy-providers:
  gohome:
    type: http
    url: http://ghproxy.ahh.com/https://gist.github.com/ekkog/20a52db0169c4a4769689521b1c5500e/raw/clash-with-tohome-provider.yaml
    interval: 60

{% endif %}
proxy-groups:
- name: Home-Relay
  type: select
  use:
    - gohome

rules:
- IP-CIDR,192.168.1.1/24,Home-Relay

使用以及代码

代码在 https://github.com/EkkoG/openwrt-natmap https://github.com/EkkoG/luci-app-natmap

预编译文件在 https://github.com/EkkoG/openwrt-dist

可以根据自己的设备添加 feed 安装或者根据架构选择分支手动下载安装

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计