最近,我的好基友配了一台配置相当好的游戏 PC,和他聊起来,我就讲了讲,我是如何把自己的游戏笔记本电脑利用联通给家里路由器分配的公网 IP,实现了自己的云游戏服务器,人在外地都可以使用 moonlight 软件直接串流玩自己家电脑上的游戏,而且延时超低,体验也超好。他很感兴趣,也想在自家的电脑上实现,我就介绍给他说需要公网 IP 让他去申请。
我给出的条件是:
1、要有单独光猫,不能带路由功能,要不就没法实现自定义的好多功能了;
2、自己家的路由器最好能刷固件,支持一些自定义功能。
对于条件 2,基友就和我买了一样的斐讯 K2P,刷了同样的 padavan 固件。但是对于条件 1,在安装移动宽带时,发现并没有不带路由功能的光猫可以提供,只能用带路由功能的。正当一筹莫展时,朋友发现可以把带路由的光猫工作模式设置为“桥接模式”,即可实现单光猫功能。
好了硬件方面准备好了,又遇到个麻烦,就是当地移动根本就不给分配公网 IP,打客服电话申请了也没有。
没办法,期间尝试 frp 内网穿透到甲骨文云主机上,问题也较多,速度也慢,无法满足云游戏的低延迟高带宽需要。
幸好,基友家的 K2P 开启 WAN 里的 IPv6 设置后,可以获取到公网 IPv6 WAN 地址。诡异的是,却无法获取 IPv6 LAN 地址,路由器下的设备都没有 IPv6 公网地址。所以只能试试直接用 IPv6 访问路由器,然后端口转发到他的游戏 PC 上就可以了。经过调试,最终成功实现,现在就把其中的操作步骤分享如下:
实现此功能需要的几个前提条件
硬件准备:
1. 游戏 PC 应配备支持 GameStream 的英伟达游戏显卡,并安装最新版本的 Geforce Experience,同时开启 GameStream 开关。
2. 游戏 PC 使用网线连接路由器,以便可以远程 Wake on LAN 来唤醒开机,同时传输数据更稳定。
3. 能刷 padavan 固件的路由器 1 台,光猫需要设置桥模式,本人是斐讯 K2P,供参考。
软件准备:
1. 一个免费的个人顶级域名(去 dot.tk 上申请)
2. 需要支持 IPv6 域名 AAAA 记录更新的 CloudFlare 账号。
3. 找到对应路由器版本的 socat 程序,用于实现公网 ipv6 地址向本地内网 ipv4 地址的端口转发。
实现步骤
第一步:完成路由器 IPv6 相关设置
1. 打开路由器 padavan 固件 WAN 设置中的 IPv6 选项。
设置如下图保存。
过个 5 到 10 分钟,去网络地图 - 外部网里状态里查看,IPv6 WAN 有 240 开头的 IP 后就说明成功获取了公网 IPv6 地址。
这里可以注意到,并未获取到 IPv6 LAN 地址,说明当地移动宽带对 IPv6 的支持可能还不太完备。
2. 设置公网 IPv6 地址的动态域名解析
因为 IPv6 地址会因为路由器重启,重新拨号等原因不断发生变动,所以有必要设置一个动态域名解析来实现一个网址和我们的路由器公网 IPv6 地址的对应关系,设置好后,需要访问路由只需要输入设置的域名即可,这里,我使用了 cloudflare 的域名解析服务和自己的免费.tk 域名。
进入 cloudflare 网站,登录自己的账号,在自己域名的 dns 记录中添加一条 AAAA 记录的域名解析,IPv6 地址可以随便输一个,比如 2400::0, 记得点掉 Proxied 按钮,使其变为 DNS Only。然后点击保存。
然后回到路由器后台设置界面,进入扩展功能 -Cloudflare 域名解析中,输入自己的 cloudflare 账号和 API Key(可以点击上面的帮助链接获取),然后在顶级域名 3[IPv6]里输入你的域名。点击保存,这样路由器就会在每 600 秒检测更新一次你指定域名对应的 AAAA 记录了,下次访问该域名就看直接访问路由器了。
至此,IPv6 的相关设置完成。可以在路由器日志里看到相关更新信息:
第二步:设置游戏 PC 的固定 IP 分配
进入路由器内部网络 (LAN) - DHCP 服务器中,开启手动指定 IP 的 DHCP 列表的启用手动设置功能开关,然后在下方添加一条游戏 PC 的 MAC 地址与 IP 地址绑定的条目。来固定给游戏主题分配一个内网 IP 地址。下一步指定端口转发时需要。
第三步:设置公网 IPv6 到内网 IPv4 地址的端口转发
1. 首先需要准备找到适合自己路由器的 socat 程序,我找了一天才从一位 大佬制作 的 K2P 固件里提取出了可用的 socat 程序文件(用 7z 解压后固件后可在 /usr/bin 目录下找到)。
2. 使用 SCP 工具将 socat 文件上传到路由器 /etc/storage/bin/ 目录下。这里我在手机上使用 AndFTP 工具上传的,过程不在赘述。
3. 使用终端软件连接路由器的 ssh 命令行,我使用的是 connectbot 软件,输入以下命令使得 socat 可用
chmod 755 /etc/storage/bin/socat
4. 回到路由器后台设置页面,进入高级设置 - 自定义设置 - 脚本,展开“在路由器启动后执行:”
在尾部输入如下内容:
nohup /etc/storage/bin/socat UDP6-LISTEN:9,reuseaddr,fork UDP4:192.168.123.204:9 &
nohup /etc/storage/bin/socat UDP6-LISTEN:47998,reuseaddr,fork UDP4:192.168.123.204:47998 &
nohup /etc/storage/bin/socat UDP6-LISTEN:47999,reuseaddr,fork UDP4:192.168.123.204:47999 &
nohup /etc/storage/bin/socat UDP6-LISTEN:48000,reuseaddr,fork UDP4:192.168.123.204:48000 &
nohup /etc/storage/bin/socat UDP6-LISTEN:48002,reuseaddr,fork UDP4:192.168.123.204:48002 &
nohup /etc/storage/bin/socat UDP6-LISTEN:48010,reuseaddr,fork UDP4:192.168.123.204:48010 &
nohup /etc/storage/bin/socat TCP6-LISTEN:48010,reuseaddr,fork TCP4:192.168.123.204:48010 &
nohup /etc/storage/bin/socat TCP6-LISTEN:47984,reuseaddr,fork TCP4:192.168.123.204:47984 &
nohup /etc/storage/bin/socat TCP6-LISTEN:47989,reuseaddr,fork TCP4:192.168.123.204:47989 &
如图:
然后点击保存。
注意,这里的 TCP4:192.168.123.204 地址是刚才我们绑定的内网地址,这里要根据大家电脑的实际 IP 修改。
9 号端口用于远程开机唤醒,剩下几个端口均为串流游戏使用。
5. 然后进入高级设置 - 系统管理 - 恢复 / 导出 / 上传设置,点击“保存 /etc/storage/ 内容”的提交按钮,将变动保存到闪存。随后点击页面上方电源按钮,将路由器重启。
至此,公网 IPv6 到内网 IPv4 地址的端口转发就设置成功了,不过路由器重启后,会有几分钟才能获取到 IPv6 地址,所以需要耐心等待一下。
第四步:设置游戏 PC 的远程开机和 GameStream 选项
1. 进入电脑的 BIOS 中,找到 WAKE ON LAN 的相关选项,打开它,此步不再赘述。(我的笔记本电脑没有此选项,但是实际支持 LAN 唤醒)
2. 打开电脑,进入系统后,打开 Geforce Experience 软件,登录账号后,点击右上方齿轮图标,点击左侧 SHIELD,然后打开 GAMESTREAM 开关即可。
这里建议添加远程桌面客户端到游戏和应用里,这样就可以以远程桌面的方式运行任意程序和游戏了。而且根据 moonlight 软件开发者说,添加了 mstsc 程序其实只是一个占位符,告诉 GFE 要运行远程桌面罢了,并不会实际运行它。
添加方式:点击下方添加按钮,选择 C:\windows\system32\mstsc.exe 程序即可,然后点击编辑按钮,修改名字和图标吧。
至此就完成了自己的公网云游戏服务器搭建哦。要想连接自己服务器,只需要在支持 ipv6 网络里打开 moonlight 软件,添加主机地址就输入前面在 cloudflare 设置的域名就可以咯。
本人实际测试了下,离基友 400 公里,还跨了移动联通运营商。在强制 H265 编码下游戏传输延迟加解码延迟才仅有十毫秒左右,根本感觉不出来。游戏体验相当好。
附相关项目地址:
本人使用的 K2P 固件:https://opt.cn2qq.com/padavan/
免费个人域名申请:https://www.freenom.com/zh/index.html?lang=zh
CloudFlare 注册:https://dash.cloudflare.com/sign-up
提取 socat 使用的固件发布地址:https://github.com/hanwckf/rt-n56u/releases
Moonlight:https://moonlight-stream.org/
Geforce Experience:https://www.geforce.cn/geforce-experience/download