1. Openwrt 如何设置 Wireguard 呢同样的参数电脑客户端可以正常使用,但是到路由器里设置,却无法使用
OpenWrt的Wireguard在安装后,只需设置
a)一个监听接口,用于连接;需要私钥、监听端口、IP地址
b)一个peer,用于认证;需要公钥、允许网段
运行vim/etc/config/network,添加以下信息:
config interface 'wgn'
option proto 'wireguard'
option private_key '私钥'
option listen_port '端口号'
list addresses 'IPv4/IPv6地址,CIDR格式'
config wireguard_wgn
option public_key '公钥'
list allowed_ips '允许的网段,CIDR格式'
密钥可以在OpenWrt下运行以下命令生成
mkdir -p /etc/wireguard
umask 077 && wg genkey > /etc/wireguard/server-privkey
cat /etc/wireguard/server-privkey | wg pubkey > /etc/wireguard/server-pubkey
cat /etc/wireguard/server-pubkey
cat /etc/wireguard/server-privkey
也可利用在其他操作系统上生成的密钥
不要忘记开放端口
IPv4
iptables -A INPUT -p udp -m udp –dport #监听端口 -j ACCEPT
IPv6
ip6tables -A INPUT -p udp -m udp –dport #监听端口 -j ACCEPT
2. RouterOSv7WireGuard隧道协议
RouterOS v7加入了WireGuard,WireGuard是一个极简而快速的加密VPN协议。其设计目标是比IPsec更快、更精简和高效,同时性能要比OpenVPN提升很多。WireGuard被设计成一种通用VPN,可以在多个平台上运行,适合许多不同的环境。最初是为Linux内核发布的,后支持跨平台(Windows, macOS, BSD, iOS, Android),能进行广泛的部署。从官方测试性能看,WireGurad对于IPsec优势非常明显,而对于OpenVPN几乎是碾压。在部署方面,WireGurad各个节点是Peer对等体的概念,而非是Server与Client关系,相互之间是对等的,一个节点既可以是发起者,锋凳也可以是接收者,比如网上提到VPN的拓扑方案中,可以是点对点,点对多点的中心覆盖,而WireGuard不一样了,不仅可以点对点,陪基态也可以点对多点,每个节点同时可连接多个 Peer,看到过有人通过WireGuard建立全互联模式,三层的Mesh网状网络。WireGuard只支持UDP协议,不支持传统的TCP-over-TCP隧道,因为TCP网络性能并不理想,如果对TCP连接有需求,将wiredguard的UDP包转换为TCP,并可以使用如udptunnel和udp2raw来协助完成。关于NAT穿透,通常情况下,WireGuard网络在未被使用的情况下,会尽量保持“安静”。在大多数情况下,它只在Peer对等体,希望发送数据包时传输数据,当它没有被要求发送数据包时,它就停止发送,直到再次被请求。在点对点公网IP连接的网络环境是这样的,然而,当一个Peer端位于NAT或防火墙之后时,即使它不发送任何数据包的情况下,也希望能接收传入的数据包。因为NAT和防火墙会跟踪“会话连接”,他必须通过定期发送数据包来维持NAT/防火墙连接会话映射的有效,即UDP的timeout时间,即被称为keepalive。WireGuard可以开启此选项,每隔一秒向对端点发送一个keepalive报文,当然适用于各种NAT/防火墙的合理间隔在25秒。默认设置keepalive是关闭状态,因为公网IP连接的用户不需要这个功能。WireGuard加密使用ChaCha20,验证使用Poly1305,它几乎在所有通用CPU上的运行速度都非常快。虽然未被专用硬件支持(IPsec支持硬件加速),但在CPU上的矢量指令(vector instructions)与AES-NI指令处于相同的优先级(有时甚至更快)。总结下WireGuard的特点:是基于UDP协议连接,具备网络性能优势 运行在Linux内核,在性能上优于IPsec和OpenVPN 每个节点通过公钥识别进行验证,加密采用的是ChaCha20Poly1305。 每个节点是平等的,既可以作为server,又可以作为client 两端仅需要一个配置公网IP,另一端在nat后也能连接,nat后的节点,仅需要对端节点公钥,以及公网IP (endpoint)和端口(endpoint port),而公网节点只需要填写连接端的公钥即可 从测试结果看未使用IPsec加密的L2TP的传输带宽性能最好,超过了WireGuard,但在使用IPsec的L2TP加密后,性能远不如WireGuard,我平时喜欢使用SSTP在RouterOS设备之间建立连接,因为SSTP端口灵活,在RouterOS建立隧道无需证书,但SSTP的传输性能在RouterOS支持的所有隧道协议中性能是最差的,现在芦源v7有了WireGuard就不一样了。