视频教程

youtube播放地址:https://youtu.be/6eLSQEbnOB0

自用专线机场推荐: https://b.m123.org
GIA高速线路VPS推荐: https://d.m123.org

相关文档

wireguard:https://www.wireguard.com/install/
免费DDNS:https://dynv6.com/
Windows 安全补丁:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38063

视频文稿(忽略)

上期教程我们通过ipv6将家里的内网服务暴露在公网,以便在异地通过公网远程管理和访问家里的网络服务,但这样做会导致一些安全问题,你能访问那么别人也能访问,即使设置了鉴权,如果开放的服务存在安全漏洞,可能导致家被偷,比如上周刚爆的windows ipv6 RCE漏洞就是非常严重的安全问题,目前漏洞利用细节还没披露,据说windows开了防火墙都没用,我收回上次那句即使ping通了也对你构成不了威胁的话,万一ping都能被利用那不是又被打脸了,建议大家到这个网址下载安装对应系统的安全补丁,网址我会放在视频下方的说明栏,或者没需要的话直接关闭windows的ipv6,另外有些朋友觉得自己是小卡拉米对黑客没啥价值,有这种想法的朋友很可能早就成为广撒网下僵尸网络中的人肉电池,黑阔表示ddos算力又+1了,提高一点自己的网络安全意识总归没坏处

除了安全问题,各种服务要暴露在公网配置起来也比较费劲,又是改防火墙配置,又是申请tls证书,服务多了不好管理,那么有没有办法不将内网服务暴露在公网,也能从异地访问内网服务呢?当然有,假设你家在山东,目前在上海出差,现在想访问家里的内网服务,只要将网线的一头插在你山东家里的路由器lan口上,另一头插在你在上海的电脑网口上,就能直接访问家里的内网服务了,这根网线就是你一个人用的专线,访问家里的网络也是你一个人用的专用网络,但显然现实中不会真的有这么一根物理的网线直接从山东拉到上海,即使有你也负担不起这个费用,既然物理专用网络玩不起,那虚拟的行不行?假装从山东拉了一根网线到上海,这就是本期要讲的虚拟专用网络,英文全称Virtual Private Network,简称vpn,运行vpn之后的效果就相当于在公网创建了一条vpn隧道,这条隧道你可以想象成是一根虚拟的网线,一头插在你山东家里的路由器上,另一头插在你上海的电脑上,这样就能直接访问家里的内网服务了,很多朋友听到vpn的第一反应就是用来翻墙的,但实际上vpn的出现主要是为了解决我们刚才说的异地访问内网服务,尤其是大公司使用非常广泛,只不过vpn对数据进行了加密,顺便实现了翻墙,类似翻墙技术的shadowsocks、vmess、vless、trojan,vpn技术的协议实现有wireguard、openvpn、IPsec VPN、L2TP等等,根据使用场景主要分为点对点vpn和远程访问vpn两种类型

点对点vpn简单理解就是vpn隧道部署在两台路由器上,也就是虚拟的网线两端都插在路由器上,实现两个路由器内部网络直接互通,这种方式在企业中应用广泛,如果你有两个家的话也可以用这种部署方式
远程访问vpn简单理解就是虚拟网线一头插在路由器上,另一头直接插在用户电脑上,此时的路由器充当了vpn服务器,电脑通过vpn客户端拨号连接vpn,大部分个人用户以及外地出差连接公司网络都是使用这种方式,我们也主要讲解这种配置方式

以linux之父将其称为艺术品的wireguard为例,wireguard即支持点对点的配置方式,也支持远程访问的配置方式
我在这期讲解各种代理模式的教程中也简单提到了wireguard vpn,当时说有机会再讲,转眼已经过去一年多了,其实如果你懂了clash的tun模式,那么理解wireguard也就水到渠成了,二者区别主要在于vpn可以直接封装网络层

假设家里的路由器wan口是运营商分配的公网ip2.2.2.2,lan口局域网网段是192.168.2.1,当路由器运行wireguard vpn之后,wireguard会开启一个udp端口,假设为23456,同时系统会创建一个虚拟的网络接口,并给接口配置了一个内网网段,假设为192.168.5.1/24
电脑的物理网卡通过网线连接到互联网,获取到运营商分配的公网ip假设为3.3.3.3,注意电脑并不需要在公网环境,我这里只是为了简便省略nat环节
当电脑使用wireguard客户端连接vpn的时候,同样会在电脑创建一个虚拟网络接口,ip地址假设为192.168.5.2,vpn成功连接之后,相当于电脑的虚拟网卡接口和路由器的虚拟网卡接口通过虚拟的网线连在一起,这条虚拟的连接就是vpn tunnel,也就是隧道,既然是虚拟的,那么该怎么通信呢?

假设此时我想访问家里192.168.2.2在80端口开启的nas服务,电脑直接在浏览器输入nas的内网地址192.168.2.2,浏览器会生成一条http请求,通过tcp传输,从本机随机开启的9527端口发送到目标192.168.2.2的80端口,这个数据包会被路由进wireguard开启的tun虚拟网卡,而wireguard可以直接从虚拟网卡里读取数据,并将数据加密,注意wireguard是加密包含了ip头部的整个网络层数据包,而clash的tun模式从虚拟网卡读到数据后,由于ss vmess之类的代理协议无法处理ip头部,所以还要使用gvisor或者system协议栈去掉ip头部解析出上层的payload,才能交给对应的代理协议进行加密封装处理,这也是二者主要的区别

接着wireguard使用他的协议格式对加密后的数据进行封装,通过udp将数据从本机开启的随机端口4134,发送到路由器的公网ip地址2.2.2.2对应的23456端口,数据将从电脑的物理网卡发出,通过公网传输,由于数据经过了加密,公网其他人看不到数据包内容,不过知道你传输的是wireguard数据,路由器将在物理网口wan收到加密数据,并将数据交给监听了23456端口的wireguard,wireguard收到数据后对其进行解密,再将解密后的数据写入虚拟网卡中,此时路由器发现数据包是发给192.168.2.2,于是将其转发给lan区域的nas服务,nas将在80端口收到192.168.5.2从4134端口发给他的数据

接着nas需要返回数据给他,从nas的80端口将数据发给192.168.5.2的9527端口,由于不是同一网段,数据将会发给路由器,路由器根据目标ip将数据发给wireguard的虚拟网卡,wireguard从网卡里读取数据并进行加密,然后重新封装成wireguard协议,并从物理网卡发出,数据经过公网传输来到了电脑,电脑从物理网卡收到数据后,将其转交给wireguard开启的4134随机端口,wireguard将解密后的数据写入虚拟网卡,经过层层解封装,数据将会交给浏览器的9527端口,经过浏览器的渲染,页面呈现在我们面前,虽然我们是经过公网传输数据,但从虚拟接口的角度来看,就像数据是从电脑的虚拟接口,直接通过vpn隧道将数据传送到路由器的虚拟接口,实现两个内网互通,这就是vpn的工作原理,另外由于我们的vpn是搭建在路由器上,所以电脑的上网数据也可以通过vpn传输到路由器,路由器再帮我们转发到互联网,如果路由器运行了代理插件,电脑也能通过vpn实现科学上网了,此时你应该就能回答,为什么vpn可以获取真实的ping延迟,因为ping是网络层的工具,vpn可以封装代理网络层,而ss vmess无法代理网络层,所以在tun模式下,要么无法ping通,要么返回1ms假延迟,要么绕过代理返回直连的ping延迟,总之不可能获取到被墙ip的ping值

接下来就手把手教大家在软路由上搭建wireguard,考虑到很多朋友家里没有公网ipv4地址,所以教程是基于ipv6搭建的,开始之前先确保你的网络接口有公网ipv6地址,可以参考之前的教程先配置好ipv6,只要确保路由器接口有ipv6地址就可以了,局域网其他设备没有ipv6也不影响

本次教程需要用到这三款插件,跟着视频操作安装,来到系统下的软件包,先更新列表,搜索ddns,安装这个luci插件,用这款的目的主要是为了方便使用免费的ddns服务,如果你有自己的域名,并且用上期软路由教程中介绍过的ddns-go插件做好了ddns配置,可以不用安装本期介绍的这款ddns插件,接着搜索wireguard,同样安装这个luci插件,最后安装qrencode,用于生成wireguard配置二维码,来到启动项,找到network,点击重启,这一步很关键,重启之后wireguard才会生效,接着状态下就会出现wireguard的选项,目前我们没有还没有配置接口,来到网络下的接口页面,在配置wireguard接口之前,我们先给这个ipv6地址做ddns配置,可以使用这个免费的ddns服务,点击右上角的sign up进行注册,填写邮箱和密码注册,收到激活邮件后激活就行了,我已经注册过了就点击sign in进行登陆,登录之后要求我们创建一个域名,按你的个人喜好设置前缀,由于是免费服务,有些后缀可能存在dns污染,比如这个后缀的ipv4被污染到127.0.0.1,尽量选择冷门的,点击创建,此时就获取到了一个免费域名了,你可以在这里手动添加解析记录当普通域名用,我们主要让软路由自动帮我们添加和更新解析,回到软路由,进入刚才安装的动态dns插件,将两个示例配置删除,添加一个新服务,名称随便填,版本选择ipv6,服务提供商选择刚才注册的dynv6,点击创建,接着点击编辑,这里填入我们刚才申请的域名,这里也一样,用户名随便输入,密码填入这个,其他保持默认,高级设置里,将ip来源改成接口,选择ipv6地址所在的接口,其他保持默认,计时器按需设置,比如多久检测一次接口ip是否发生改变,以及即使接口ip没有发生改变也强制更新域名解析,不填就按默认值,点击保存,最后点击保存并应用,然后点击重新加载,此时就会变成运行中,可以在日志查看器中查看详细的运行状态,可以看到在wan口获取到了ipv6地址,然后会和域名原来的解析记录进行对比,刚注册的域名没有任何解析,当发现二者不一样之后,将会更新域名的解析,这里表示更新成功,接着等待600秒之后再检测,也就是我们刚才在计时器中设置的10分钟,这里有个注意事项,你的路由器本身必须要能够获取域名的ipv6解析记录,ddns插件才能正常运行,因为路由器要进行dns查询获取到域名的ipv6才能和接口上的ipv6进行对比,有些朋友可能看了这期教程关闭了ipv6的dns解析就会导致ddns插件无法正常工作,可以回看教程重新开启或者部分域名开启ipv6解析功能

此时回到ddns网站,可以看到这里自动添加了一条ipv6的解析记录,ip就是我路由器wan口的ip地址,稍等片刻后尝试进行dns查询,可以正确获取到域名的ipv6地址,确保没有出现被污染的ipv4地址,至此ddns的设置就算是完成了

接下来开始配置wireguard vpn,来到网络接口,添加新接口,随便给个名称,协议选择wireguard vpn,点击创建,点击生成密钥对用于加解密数据,随便设置一个端口,比如23456,设置该接口所使用的ip段,不能和已存在的内网网段冲突,我现在的内网网段是192.168.2,那我可以设置成192.168.5,点击添加,其他保持默认,防火墙设置为lan区域,个人使用没必要再单独划一个区域给自己找麻烦,点击添加对端,随便给个方便区分的描述,比如是给手机用的,点击生成密钥对,预共享密钥可以不用设置,允许的ip随便填写一个网段内的ip,比如这个接口的ip刚才设置的是192.168.5.1,那我这里可以设置为192.168.5.2,点击添加,其他保持默认,最后点击生成配置,这就是wireguard客户端需要用到的配置文件,非常简洁,左侧还有配置对应的二维码,这里可以看到端点自动配置成了我们的ddns域名,来到最上方,你如果是用其他插件设置的ddns,可以在这里手动填写域名,接着这个配置就可以在其他设备上使用了,可以在这个网址获取各个操作系统的软件安装包,先演示手机端,在app store使用非国区ID下载wireguard, 软件很简洁,点击中间的添加隧道,选择扫描二维码,随便设置一个名称,点击允许,这样就添加了一条配置,现在还不能连接,即使连接了也没网,因为路由器还没保存配置,点击保存,接着保存并应用,最后重启一下wireguard的网络接口,另外由于我们开启了防火墙,还需要对外放行wireguard监听的端口23456,来到防火墙下的通信规则,点击添加,随便给个名称,wireguard是通过udp传输的,所以只需放行udp,源区域设置为wan,目标区域设置为设备,目标端口填写23456,动作为接受,在高级设置里将协议设置为仅ipv6,点击保存,最后点击保存并应用,这样一切准备就绪了,回到接口,可以看到wireguard的网络接口已经有数据了

手机目前是使用运营商的5g网络,已经连接到了vpn,此时我使用手机访问家里的路由器管理地址192.168.2.1,成功进入了路由器的管理界面,接口的数据量也相应的增加了,此时这台手机就好像是连接了家里的wifi一样,可以直接通过局域网ip访问内网资源,假设这台电脑在8000端口开了NAS服务,不需要将其暴露在公网,现在这台连接了wireguard vpn的手机可以直接通过内网ip访问相应的资源,非常方便,可以看到相应的访问日志,访问者的ip是我们在wireguard里设置的192.168.5.2,需要注意的是192.168.2和192.168.5是不同的网段,由于二者都在lan区域,需要开启lan区域内的转发才能成功互访,之前已经详细介绍过了

另外连上wireguard之后,同样可以利用软路由上的代理插件实现科学上网,分流也是按照你路由器的设置,网速取决于你家带宽的上行速度以及节点的速度,总之手机就像是连上了家里的wifi,这就是真正的vpn所实现的效果,可以在状态下的wireguard查看已连接的对段信息,包括手机的公网ipv6地址,以及传输的流量

可以继续添加其他对端,回到网络接口,编辑wireguard接口,点击添加对端,随便给个描述,操作方式是一样的,ip填写一个没有被占用的,比如192.168.5.3,其他保持默认,点击生成配置,这个配置就可以在你的其他设备使用了,记得要先保存配置,并且重启wireguard的网络接口,否则不会生效

以mac为例,windows也是一样的操作方式,选择添加空隧道,复制刚才的配置文件,将里面的内容替换掉,随便给个名称,点击保存,接着就可以启动了,启动之后就像手机一样,相当于连接到家里的局域网了

另外有些朋友可能连上wireguard之后会出现网络卡顿严重,远达不到家里的上行带宽,很大概率是wireguard默认mtu太大导致数据包被分片,分片会严重影响网络性能,你可以使用抓包工具wireshark观察这一现象,测速的时候如果wireguard数据包中掺杂了大量如图所示的白色背景数据包,就是经过了分片,需要调小wireguard的mtu,比如1400或者1380,如果还存在分片的话可以继续调小,至于mtu啥作用有机会再细讲

最后再来讲讲通过常用的ss vmess节点访问家里的内网资源,虽然没法像vpn一样代理网络层,但我可没说过不能代理内网ip地址
首先还是和上期讲过的一样,在软路由上搭建一个节点,不管是homeproxy还是openclash或者其他代理插件都可以,我在7788端口搭建了一个vmess节点,接着我用小火箭连接这个节点,节点可以正常科学上网,但是我不能访问路由器的管理地址,分流是配置模式,来测试一下192.168.2.1是怎么路由的,可以看到是直连,我们需要让这个地址被代理,搜索对应的规则,将其改成代理,保存之后重新访问,你会发现依然无法访问,因为这种内网地址大多数代理工具会默认绕过,即使开了全局模式,来到通用设置,可以看到这个内网段被跳过了代理,这里的优先级要比你自己的分流配置文件高,将其删除,保存配置,此时我们再来访问路由器,就可以成功通过内网地址访问了,同样也可以访问内网nas服务,访问日志显示是路由器的192.168.2.1,所以不要将你家的节点随便分享给别人,指不定你内网某些隐私服务就被别人扒拉干净了,还有那些暴露在公网的clash,真的以为自己只是暴露了个节点吗?
其他客户端也是和小火箭一样操作,让你局域网的网段通过节点代理就行了,如果大家有需要的话我可以单独水一期,讲解各个客户端如何实现代理内网以及注意事项

最后修改:2024 年 08 月 24 日 02 : 06 PM