openwrt借助realmのtls转发搭建本地游戏节点|实现FullCone&NAT1

实用教程 admin 2年前 (2023-05-08) 1619次浏览 0个评论

介绍

今天在水群的时候,有老哥提到,可以在openwrt软路由上跑一个gost,通过隧道代理搭建游戏节点,小白觉得这是一个很不错的想法。众所周知,众多代理协议中(真VPN除外),shadowsocks和sock5(以下简称ss和s5)是支持原生UDP的,而其他代理协议则是通过UoT(UDP over TCP)来处理UDP数据包的。以下内容摘自RPXR进阶必读:代理协议 UDP 全方位透彻解析

  1. Socks5、Shadowsocks 都是原生 UDP,它们的 UDP 不走底层传输方式
  2. VLESS、Trojan、VMess、Mux 都是 UDP over TCP,且走底层传输方式
  3. HTTP 出入站不支持代理 UDP,Socks 版本 5 之前也不支持 UDP
  4. 这里的 FullCone 指的是 UDP 的 NAT 行为,配置时尤其注意防火墙
  5. 链式代理若要实现 FullCone,一般来说所有环节都要支持 FullCone
  6. Docker 若要实现 FullCone,相关容器的网络模式需要是 Host

补充:Socks、SS 是原生 UDP,套 TLS/WSS 后它们的 UDP 并没有被特殊处理,除非开了 Mux。SS 的 SIP003 插件也不管 UDP。

UDP over TCP 简称 UoT,特别注意,即使你用 mKCP、QUIC 作为底层传输方式,UoT 的也并不会表现出原生 UDP 的那些特性。

关于原生UDP和UoT的区别,大家可以去看不良林的这个视频

我们先来看一下nat类型:

我们要实现在线游戏或者联机对战都是需要FullCone或者NAT1的,而最佳的方案肯定是使用ss或者s5实现原生UDP的FULLCone,但是目前这种情况下,继续使用ss或者s5,IP几乎是很快就没了……通行的做法是采用国内中转机通过隧道中转,但是并不是每个人都需要或者说想再买一台国内机器的。但是,对于很多游戏玩家来说,大部分人还是拥有一台openwrt的软路由的,openwrt本身也是Linux系统,这不是现成的中转机嘛。我们完全可以把我们的软路由当作中转机,通过隧道中转我们的ss节点。

群内老哥使用的是gost,小白我比较习惯使用realm,那我们今天来试试通过realm转发。

此处为官方项目地址:

https://github.com/zhboner/realm

具体配置文件写法,请参考:

https://github.com/zhboner/realm/tree/master/examples

realm最新发行版为v2.4.6

realm支持json和toml格式的,小白这里采用的toml格式的配置文件。

入口端配置

我们直接ssh登录软路由,新建一个realm目录并进入该目录:

mkdir realm && cd realm

下载对应的realm版本,小白的软路由为废弃笔记本改造而来,X86架构,我们选择此版本:

通过如下命令,下载:

wget https://github.com/zhboner/realm/releases/download/v2.4.6/realm-x86_64-unknown-linux-musl.tar.gz

如果你的本地环境连接GitHub比较困难,可以先下载下来,然后再上传……

解压,我们会得到realm的可执行文件:

tar -zxvf realm-x86_64-unknown-linux-musl.tar.gz

新建配置文件:

touch config.toml

写入如下内容:

[network]
use_udp = true
[[endpoints]]
listen = "0.0.0.0:xxx"
remote = "xxx.xxx.xxx.xxx:xxxx"
remote_transport = "tls;sni=xxxxx.com;insecure"

其中,listen = “0.0.0.0:xxx”,请自行选择空闲端口监听,remote = “xxx.xxx.xxx.xxx:xxxx”,为隧道出口的IP和端口,remote_transport = “tls;sni=xxxxx.com;insecure”中xxxxx.com请自行填写任意域名,需与出口端保持一致。我们直接命令行realm:

./realm -c config.toml

运行结果如下:

出口端配置

新建一个realm目录并进入该目录:

mkdir realm && cd realm

下载对应的realm版本,X86架构,我们选择此版本:

通过如下命令,下载:

wget https://github.com/zhboner/realm/releases/download/v2.4.6/realm-x86_64-unknown-linux-gnu.tar.gz

解压,我们会得到realm的可执行文件:

tar -zxvf realm-x86_64-unknown-linux-gnu.tar.gz

新建配置文件:

touch config.toml

写入如下内容:

[network]
use_udp = true
[[endpoints]]
listen = "0.0.0.0:xxxx"
remote = "xxx.xxx.xxx.xxx:xxxx"
listen_transport = "tls;servername=xxxxx.com"

其中,listen = “0.0.0.0:xxx”,请自行选择空闲端口监听,remote = “xxx.xxx.xxx.xxx:xxxx”,为ss节点的IP和端口,如果隧道出口机和ss节点机位同一台机器,请填写127.0.0.1:xxxx。listen_transport = “tls;servername=xxxxx.com”中xxxxx.com请填写和入口端相一致的域名。我们直接命令行realm:

./realm -c config.toml

运行结果如下:

 实际测试

小白的软路由为192.168.1.4,我们直接在v2rayN中,直接填入软路由的IP和realm监听的端口:

我们来测试下nat类型,完美FullCone&NAT1。

优化

1.我们可以直接将节点填入软路由中的passwall、openclash等插件中,从而实现透明代理,全局fullcone。

2.我们可以将realm放入tmux或者screen中,后台运行。

3.关于进程守护,开机启动:

出口端可以直接采用systemctl进程守护,自己写个service文件,加入开机启动就行了,网上很多教程,小白就不赘述了。

入口端,openwrt采用的是procd实现进程管理,小白不熟,自行学习……


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:openwrt借助realmのtls转发搭建本地游戏节点|实现FullCone&NAT1
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址