MikeWang000000 / Natter

Expose your TCP/UDP port behind full-cone NAT to the Internet.
GNU General Public License v3.0
1.57k stars 129 forks source link

一个结合nginx使用的设想,希望能探讨一下是否能实现 #24

Closed WuJoker closed 1 year ago

WuJoker commented 1 year ago

如果能实现的话我试试能不能自己去研究搭建一下。

从v0.9.0的特性介绍来看,似乎外网IP及端口发生变动(例如运营商重启网关)后,natter是可以得知并且进行更新的,并且留下了hook脚本。 而nginx可以在使用不同域名访问时,跳转到指定的ip+端口,而配合lua-module,是可以实现动态修改配置文件中域名跳转目标的。 那么能不能在natter发生了IP地址更新时,通知某一台公网服务器的nginx进行配置文件的修改,并且重启nginx,实现直接通过指定不同二级域名,访问不同服务的目的(这样就不用关心IP端口发生变化了,因为nginx自己会去修改跳转到新的目标)

网页提供的服务进行跳转肯定是没有问题的,例如webdav、nextcloud、jellyfin一类的。 但例如微软远程桌面这种客户端里面,填入二级域名,可以完成跳转吗?或者是mc填写目标服务器一类的

IMZCC commented 1 year ago

远程桌面客户端填写域名,通过DNS解析出一个IP,使用默认端口或者指定端口 web端服务是因为80 这些端口指向到你的nginx服务,所以可以交由你的nginx做一些代理

WuJoker commented 1 year ago

@IMZCC 也就是说这个nginx即使成功了,也只能用于一些网页服务的无缝使用,不能完全作为公网一样提供任意客户端和协议的使用是吧。 即使这样我认为应该也有一定价值的,比如可以用作nextcloud的情况下,我应该可以在外部随意把nextcloud文件链接分享给别人了,当作一个真正的个人云盘。

IMZCC commented 1 year ago

@WuJoker 对的,还要考虑流量是不是从你的公网转发的。 可以看下https://github.com/IMZCC/Natter 使用 https://www.dynu.com/en-US/ 一个网页跳转功能,实现将不同的二级域名,跳转到不同的ip:port

MikeWang000000 commented 1 year ago

是可以的,使用 Natter 或者 NATMap 提供的脚本接口,自己写一个脚本,通知外部 Nginx 修改目的地址,302回家。 如果想要利用免费的服务,可以调用 Cloudflare 的 Page Rules 的 API,也是可以直接 302 回家。 类似的功能拓展比较多,隔壁 NATMap 研究了不少,贴一个连接在这 https://github.com/heiher/natmap/issues/13

其他的服务跳转比较难,具体得看它们自身软件的支持程度了;所以使用 Natter 方案作为一个真正的公网服务器还是有缺陷的。毕竟外部端口是运营商随机分配的,我们没有办法控制╮(╯▽╰)╭