OpenWrt旁路由配置wireguard+校园网白嫖教程
*本身这篇博文是为了我上大学为了减少校园网的费用所预备的,结果上大学后发现校园网不要钱……
WireGuard是一款极其简单、快速、现代化的VPN,采用最先进的加密技术。它的目标是比IPsec更快、更简单、更精简、更有用,同时避免了配置上巨大的头痛。它比OpenVPN的性能高得多。WireGuard被设计为一种通用VPN,用于在嵌入式接口和超级计算机上运行,适用于许多不同的情况。它最初是为Linux内核发布的,现在是跨平台的(Windows、macOS、BSD、iOS、Android),可广泛部署。它目前正在大力开发中,但它可能已经被视为行业中最安全、最容易使用和最简单的VPN解决方案。
WireGuard基于UDP协议传输,通过位于Linux内核内部的调度将高质量的加密和高速度的网络相结合,它既适用于智能手机等小型嵌入式设备,也适用于满载的主干路由器。
多数发行版Linux有不少的一键包,这里说一下OpenWrt的配置:
在openwrt中安装wireguard建议通过System->Software
进行安装:
1、点击 Network->Interface
中的 Add new interface
创建接口:
2、接口名称建议 wireguard
,协议选择 WireGuard VPN
进行创建:
3、一般设置:
Private Key
是WireGuard节点的私钥,可通过Generate Key Pair
按钮生成,也可手动生成:Listen Port
监听的端口,根据自己情况设置IP Addresses
是WireGuard接口的私有IP网段,这里设置为10.0.0.1/24
不要与其它内网IP段冲突。
4、防火墙设置,新建一个区域wg:
5.去防火墙放行端口(多数固件允许入站之后其实是自动放行的),添加下面的自定义规则:
iptables -A FORWARD -i wg -j ACCEPT iptables -t nat -A POSTROUTING -o br-lan -j MASQUERADE
客户端配置
首先,通过这里的安装方式进行客户端的安装:https://www.wireguard.com/install/,我这里以iOS举例。
1、点击 创建隧道->手动创建
:
2、填写基本信息,主要填写下面三项,其它默认:
名称,这里随便填
公私钥,这里点击
生成密钥对
随机生成即可。局域网IP地址,即客户端节点IP,这个地址要设置为符合
10.0.0.1/24
。
3、通过 添加节点
添加服务器信息:
公钥,填写服务端的公钥。
对端,服务端地址+端口,由于家里没有公网,这里走的frp,所以填的是公网vps代理地址。
路由的IP地址(段),这里填写需要走wireguard网络的IP段,如:
192.168.100.0/24,192.168.2.0/0,10.0.0.0/0
。这样当开启wireguard vpn之后访问这些IP就会走vpn网络。如果需要内外网都能访问,请填写0.0.0.0/0,::/0
到了这一步,客户端已经完成配置了。但是服务端还没有,因为wireguard本质上是一个P2P通信的软件,我们还要将客户端公钥信息配置到服务端才行。
配置Peer
在openwrt配置wireguard peer信息。
填写刚才配置的客户端信息,Save
保存即可:
现在在手机上开启 vpn,尝试访问一下路由器地址 192.168.100.1
是否可行。
如果需要校园网白嫖:
环境:锐捷验证(其他验证原理类似,自行尝试),局域网没强制跳转DNS路由器,学校能找到无需验证就能上网的电脑
需要变更的内容:
将DNS接口从53改成5333,将DHCP的排除接口全部选上
将wireguard的监听接口改成53
放了个B站视频:以北京石景山某中学为例突破锐捷网络验证_哔哩哔哩_bilibili
Wireguard的原理:
WireGuard 通过 UDP 安全地封装 IP 数据包。添加一个 WireGuard 接口,使用私钥和对等方的公钥对其进行配置,然后通过该接口发送数据包。密钥分发和推送配置的所有问题都超出了 WireGuard 的范围;这些问题最好留给其他层,以免我们最终导致IKE或OpenVPN的膨胀。相比之下,它更多地模仿 SSH 和 Mosh 的模型;双方都拥有彼此的公钥,然后他们就可以开始通过接换数据包。
简单网络接口
WireGuard的工作原理是添加一个(或多个)网络接口,如eth0或wlan0,称为wg0(或wg1、wg2、wg3等)。
然后,可以使用ifconfig或ip地址正常配置该网络接口,使用路由或者ip路由。接口的特定WireGuard方面使用wg工具进行配置。此接口充当隧道接口。
WireGuard将隧道IP地址与公钥和远程端点相关联。当接口向对等端发送数据包时,它会执行以下操作:
1.此数据包适用于192.168.30.8。那是哪个peer?让我看看……好的,这是给peer ABCDEFGH的。(或者,如果不是针对任何配置的对等方,则丢弃数据包。)
2.使用对等的EFGH公钥加密整个IP数据包。
3.对等方的远程端点是什么ABCDEFGH?让我看看……好的,端点是主机216.58.211.110上的UDP端口53133。
4.使用UDP通过Internet将步骤2的加密字节发送到216.58.211.110:53133。
当接口接收到数据包时,会发生以下情况:
1.我刚从主机98.139.183.24上的UDP端口7361收到一个数据包。让我们解密它!
2.它为对等LMNOPQRS进行了正确的解密和身份验证。好吧,让我们记住,使用UDP的对等LMNONQRS的最新Internet端点是98.139.183.24:7361。
3.解密后,纯文本数据包来自192.168.43.89。对等LMNOPQRS是否允许以192.168.43.89的身份向我们发送数据包?
4.如果是,请接受接口上的数据包。如果没有,就放弃它。
在这一系列安全快速的网络连接的背后,使用最先进的加密技术提供适当的隐私、真实性和完美的前向保密性的工作正在进行。
加密密钥路由
WireGuard的核心是一个名为加密密钥路由的概念,它通过将公钥与隧道内允许的隧道IP地址列表相关联来工作。每个网络接口都有一个私钥和一个对等方列表。每个对等方都有一个公钥。公钥短而简单,由对等方用来相互验证。它们可以通过任何带外方法传递到配置文件中使用,类似于将SSH公钥发送给朋友以访问shell服务器的方式。
例如,服务器可能具有以下配置:
[Interface] PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk= ListenPort = 51820 [Peer] PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg= AllowedIPs = 10.192.122.3/32, 10.192.124.1/24 [Peer] PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0= AllowedIPs = 10.192.122.4/32, 192.168.0.0/16 [Peer] PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA= AllowedIPs = 10.10.10.230/32
客户端可能具有以下更简单的配置:
[Interface] PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE= ListenPort = 21841 [Peer] PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw= Endpoint = 192.95.5.69:51820 AllowedIPs = 0.0.0.0/0
在服务器配置中,每个对等方(客户端)将能够向网络接口发送数据包,其中源IP与其相应的允许IP列表相匹配。例如当服务器从对等方gN65BkIK…接收到packet时,解密认证后,如果其源IP为10.10.10.230,则允许其进入接口;否则它会掉下来。
在服务器配置中,当网络接口想要向对等方(客户端)发送数据包时,它会查看该数据包的目标IP,并将其与每个对等方的允许IP列表进行比较,以查看将其发送到哪个对等方。例如,如果要求网络接口发送目标IP为10.10.10.230的数据包,它将使用对等方gN65BkIK的公钥对其进行加密,然后将其发送到该对等体的最近的互联网端点。
在客户端配置中,其单个对等方(服务器)将能够向具有任何源IP的网络接口发送数据包(因为0.0.0.0/0是通配符)。例如当从对等方HIgo9xNz…接收到packet时,如果它使用任何源IP正确解密和验证,那么它就可以进入接口;否则它会掉下来。
在客户端配置中,当网络接口想要向其单个对等端(服务器)发送数据包时,它将为具有任何目标IP地址的单个对等端加密数据包(因为0.0.0.0/0是通配符)。例如,如果网络
接口被要求发送具有任何目的IP的数据包,它将使用单个对等体HIgo9xNz的公钥对其进行加密,然后将其发送到单个对等体的最近的互联网端点。
换言之,当发送数据包时,允许的IP的列表表现为一种路由表,而当接收数据包时,所允许的IP列表表现为某种访问控制列表。
这就是我们所说的加密密钥路由表:公钥和允许的IP的简单关联。
IPv4和IPv6的任何组合都可以用于任何字段。WireGuard完全能够在必要时将一个封装在另一个内部。
因为在WireGuard接口上发送的所有数据包都经过加密和身份验证,而且对等体的身份和允许的对等体IP地址之间存在紧密耦合,所以系统管理员不需要复杂的防火墙扩展如IPsec,他们可以简单地匹配“它来自这个IP吗?在这个接口上?”,并确保它是一个安全可靠的数据包。这大大简化了网络管理和访问控制,并为您的iptables规则实际上正在做您想让它们做的事情提供了更多的保证。
内置漫游
客户端配置包含其单个对等方(服务器)的初始端点,因此它在接收加密数据之前就知道将加密数据发送到哪里。服务器配置没有任何对等端(客户端)的初始端点。这是因为服务器通过检查经过正确身份验证的数据源自何处来发现对等端的端点。如果服务器本身更改了自己的端点,并向客户端发送数据,则客户端将发现新的服务器端点并更新配置。客户端和服务器都会将加密的数据发送到最近的IP端点,并对其进行真实解密。因此,两端都有完整的IP漫游。
为容器而生
WireGuard使用最初创建WireGuard接口的网络命名空间发送和接收加密的数据包。这意味着,您可以在可以访问Internet的主网络命名空间中创建WireGuard接口,然后将其移动到属于Docker容器的网络命名空间中,作为该容器的唯一接口。这确保了容器访问网络的唯一可能方式是通过安全加密的WireGuard隧道。