跳转至

如何实现网络自由

如何实现网络自由:-)

这里说的网络自由,是指通过网络工具极大地便利生活的某些方面。这篇文章是我自己对折腾路由器刷机、openwrt、ipv6 的总结,并尽量说明了各种玩法的实际用途。其中有些操作确实给我带来了极大便利,比如其中使用 iSCSI 通过网络挂载其它设备的硬盘,这充分解放了我只有 500GB 的轻薄本。在上面安装游戏后,又可以实现在不同设备上无缝玩同一个游戏的体验。

基础知识

  • 光纤宽带上网

    对于光纤接入的宽带,会有一个设备叫做光猫(猫,modem,调制解调器),用于将光信号转换为电信号。光猫后面除了光纤接入,还有一排 LAN 口作为输出。我们会将其中一个 LAN 口连接到自己买的路由器背后的 WAN 口上(只有一个,并且一般颜色不一样)

    此时有两种配置方法可以上网:

    • 光猫中设置拨号上网,路由器 WAN 设置为 DHCP 协议

      一般情况下装宽带的师傅会设置成这种方式,这种情况下光猫也相作为一个路由器,自己买的路由器则相当于一个二级路由器

      ps. 这种情况下,光猫和路由器处于两个不同的网段 (局域网),中间经过一层 NAT,比如光猫为 192.168.0.1,路由器为 192.168.1.1

      ps. 光猫中一般也可以开启一个无线网络,名字是固定的。因此甚至可以不用路由器而只使用光猫

      ps. 存在性能问题:一般来说,光猫的硬件配置相对于自己买的路由器都比较低,作为路由器的话可能造成性能瓶颈,因此更推荐下面的配置方式

    • 光猫设置为桥接模式,路由器 WAN 设置为拨号上网

      这种方式,光猫只作为一个光电转换设备,路由器负责路由、转发。因此光猫不会造成性能瓶颈。

  • 公网 ip

    • 计算机之间要想相互通信,需要使用 ip 地址来进行标识。如果每台计算机的 ip 都不同,那么情况最简单。这种 ip 称为公网 ip
    • 但是由于 ipv4 数量有限,无法给每台计算机都分配一个唯一的 ip,因此产生了 NAT 技术。大致过程:连接到同一个路由器上的设备(即一个局域网)被分配给一个内网地址。当其中某个设备上网时(如访问 B 站),路由器转发该设备的网络包,并将其中的 ip 转换成自己的公网 ip。之后当路由器接收到 B 站服务器的响应时,同样将网络包中 ip 转换回设备的内网 ip。

      因此,整个过程中,B 站的服务器认为在和路由器进行通信。

    • NAT 使得一个局域网内的设备共用一个公网 ip 上网,甚至还可以多层 NAT 套娃,大大节约了 ip 地址。但是同时也使得局域网外的设备无法访问局域网内的设备,带来了需要内网穿透的问题
    • 目前家用宽带,分配的 ip 基本是内网 ip,上网时需要经过运营商路由器的 NAT 转换。
    • 但是!随着 ipv6 的普及,目前家用宽带均可以获得公网的 ipv6 地址!有了 ipv6 后,每个设备都可以获得唯一的 ipv6 地址,万物均可互联,终于回归到了互联网本来的样子!
  • 内网穿透

    使得局域网外的设备访问局域网内的设备便叫做内网穿透。内网穿透很复杂,况且有了 ipv6 后便可以把这些都丢掉了,因此这里仅简单说明一下常见的内网穿透方式:

    • 最简单的情况,使用一个公网服务器作为跳板。设备 A 要想访问内网中的设备 B,先访问服务器 C,C 再将数据转发给 B。

      缺点:这种方式 A 访问 B 的带宽受限于购买的服务器 C 的上传下载带宽。一般的服务器可能只有 1~2M 的带宽,很小。

      ps. 使用过的工具有 Frp

    • udp 打洞,这种比较高级,涉及到 NAT 的原理。采用这种方式需要其中一个设备有公网 ip。没有的话,则需要服务器 C 进行初始化连接,打洞成功后,A 直接访问 B 不需要 C 的转发,因此访问带宽不会被 C 的带宽限制

      缺点:udp 打洞对 NAT 类型有要求,并非所有 NAT 类型都能打洞成功

      ps. 许多 P2P 工具,联机游戏,都会使用该技术

    这里梳理了一下不同网络情况下内网穿透方式{% post_link 不同情况下的内网穿透 %}

基础

实现网络自由的基础便是每台设备都能获得一个公网的 ip,ipv6 使我们能做到这一点

开启 ipv6

  • 对于家里接入了宽带的情况,各大运营商基本都支持 ipv6,但不一定开启了。需要在光猫里设置
    • 移动光猫开启 ipv6 教程{% post_link 移动光猫开启 ipv6 %}
  • 对于学校连接校园网的情况,校园网除了接入几大运营商,还可能接入教育网,一般都支持 ipv6。此时在路由器相关选项里打开 ipv6 即可。
  • 对于路由器为 openwrt 的情况,配置 ipv6 教程openwrt 配置#ipv6

DDNS

虽然 ipv6 是得每个设备有了公网 ip,但是有两个问题:

  • 目前 ipv6 有有状态的分配协议 DHCP,也有无状态的 SLAAC 协议,分配的 ip 地址可能发生变化。
  • ipv6 地址有 128bit,太长了不容易记忆

解决以上问题的方式便是将 ipv6 绑定到一个域名上。

FreeDNS 和 openwrt 配置介绍openwrt 配置#DDNS

玩法

远程桌面

使用 windows 自带的“远程桌面连接”,便可以远程连接到其他 windows 计算机。不只是电脑,手机平板等平台也均可下载 rdp 软件连接到 windows。

ps. 1. 服务端需要开启远程连接服务,需要 windows 专业版,但是 github 上有家庭版开启的方法。2. linux 和 windows 也可通过 rdp 协议相互连接

用例:

  • 计算机专业去机房做实验时,直接在机房电脑上远程连接到寝室/实验室电脑
  • 回家时台式机搬不回家?将台式搬到实验室(不会断电),在家远程开机,再通过远程桌面连接办公。
  • (亲身经历)某次英语做 presentation 时,教室的电脑识别不了自己的 U 盘,直接远程连接宿舍的电脑,将文件复制到教室的电脑中。(有点 cool)

云游戏

几个串流软件

  • SteamLink:只要有 steam 就可以串流,效果不错
  • AMD Link:试过内网串流,感觉差不多。没实现成功外网串流
  • moonlight(NV):基于 NV 的 Sheild 实现的开源版本,据说效果很好

亲身经历,老家江西乐平(100M 移动宽带),台式机位于安徽合肥学校实验室(1000M 教育网),使用 ipv6 连接 (使用了 wireguard VPN 连接到学校),使用 SteamLink 绚丽模式(最好画质),玩怪物猎人世界,延迟可以稳定在 20-30ms 之间,完全不卡(如果波动到 60ms 就会卡,20-30ms 属于效果很好的情况)

不过也有一些小问题:

  • 画面有时会出现许多马赛克,或者有时整体像是加上了一个滤镜,偏紫。感觉是 udp 数据传输错误导致的。或者是 steamLink 的问题?
  • steamlink 只有手机平板端支持 HEVC 编码,其余均只支持 h264 编码。不知道换用编码能不能解决上面的画面问题。(平板的 typec 经转接后是可以连接网线的,再次尝试后仍然出现了上面问题,不过感觉好像 SteamLink 并没有开启 h265 编码,信息栏仍显示台式机在使用 x264 进行编码)
  • 台式机使用的显卡为 RX550,性能很弱。串流时,编码使用了 CPU 编码,因此对性能稍稍造成了一点影响。
  • 总之,感觉用英伟达的硬件+moonlight 可能效果会更好。

家庭影院

在电脑上下载好高清视频,开启 SMB 共享,在安卓电视上安装 kodi 软件,通过 ipv6 添加电脑。电视就可以直接播放电脑视频了,而且 Kodi 作为一个前端软件,还有许多功能,比如自动扫描文件,添加电影封面、简介之类的。

实际操作{% post_link 小米电视访问电脑视频 %}

iSCSI 网络挂载磁盘

可以通过网络将某个设备上的磁盘挂载到别的电脑上

对于客户端来说,挂载的盘和其他盘一样,可以安装软件。经测试,虽然游戏加载延迟确实受到网络带宽影响。但是是真的可以打游戏的,即使是运行 50GB 的 MHW 效果也非常的好,甚至没有感觉到加载延迟。

用例:

  • 老笔记本不怎么用了,但是不想浪费上面的 1TB 磁盘?装上 Linux,将磁盘作为 iSCSI server 分享出去。
  • 轻薄本仅有 500G 固态且无法扩展?挂载上其他设备上的 1TB 磁盘,直接解放。
  • 在一个磁盘上安装好游戏,自己的设备带不动,下次蹭一下别人的电脑,用别人的电脑来玩

设置方法参考{% post_link 网络挂载磁盘 (iSCSi) %}

路由器玩法

openwrt 刷机

以下路由器玩法均需要有一个路由器,并且需要刷成第三方系统,推荐 openwrt 系统。

  • 刷 openwrt 参考:{% post_link openwrt 刷机 %}
  • 如果有需要,还可以参考如何自己编译 openwrt 固件:{% post_link openwrt 编译 %}

远程开机

使用网络唤醒 WOL(wake on LAN) 方式对电脑进行开机。比如远程将实验室的台式机开机,然后进行远程桌面连接。

定时脚本

在路由器上使用 crontab 定时运行脚本,比如使用 python 自动进行签到、抢课。

VPN

使用 VPN 可以在外地访问内网。比如放假回家,通过 VPN 连接到学校的路由器,然后可以访问校内资源。

内网穿透

外网访问路由器内网设备

  • zerotier:最简单的内网穿透工具,需要注册 zerotier 账号,zerotier 会尝试使设备间直接连接,不行则使用 zerotier 服务器转发(给的带宽也很高)。
  • wiregurad 做 VPN 同时,也可以进行内网穿透

透明代理

在路由器上运行代理软件,如 ssr, clash。从而实现连接到该路由器上的设备均可科学上网,而不用进行任何额外设置。

小型 NAS

对于有 USB 接口的路由器,可以接上一块移动硬盘(或者充分利用你的 U 盘:-))来作为一个文件存储器。

其他网络工具

barrier

一款开源免费的键鼠共享工具,通过网络使一套键鼠可以控制多个设备,并且还支持剪切板,文件拖动等功能。在 windows 和 linux 上均可使用。