WireGuard 是新一代的虚拟专用网内核模块,它以代码极简、性能极高、配置简单著称。它被直接集成在 Linux 内核中(5.6 版本以上),因此运行效率非常高,非常适合用于异地组网、内网穿透等使用场景。
Rocky Linux 10.1WireGuard 已经内置于新版内核中,Rocky Linux 10 默认使用的是较新的内核(通常是 6.x 版本),而 WireGuard 在 Linux 内核 5.6 版本之后就已经正式合并到主线内核了。
vi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加:wq! #保存退出setenforce 0 #使配置立即生效getenforce #查看 SELinux 当前运行模式
Rocky Linux 10.1默认使用的是firewall作为防火墙firewall-cmd --list-all #显示所有规则(含服务、端口、区域)systemctl status firewalld #检查 firewalld 状态
WireGuard 服务的默认监听端口是UDP 51820,可以自定义修改为其它的端口#开放端口firewall-cmd --permanent --add-port=51820/udpfirewall-cmd --reload #重新加载防火墙配置firewall-cmd --list-all #显示所有规则
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confecho "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.confsysctl -p
yum install wireguard-toolsmodprobe wireguard #手动加载模块,如果没有报错(直接返回命令行),说明模块已存在且加载成功。
#创建一个目录用于存放生成的密钥对mkdir -p /etc/wireguard/certcd /etc/wireguard/cert# 生成服务端私钥server.keywg genkey > server.key# 使用上一步的服务端私钥生成公钥server.key.pubwg pubkey < server.key >server.key.pub# 查看生成的密钥对[root@localhost cert]# cat server.key server.key.pubuPdVDbrCYfU9l4AxVhdxEYiiDj6Ourut6x2hFG6+rlU=21BHMnZyC/qLnpN/5eepey6VsRfCpMJpDgt0vwmehDM=
# 客户端1私钥wg genkey > client1.key# 客户端1公钥wg genkey < client1.key > client1.key.pub# 查看生成的密钥对cat client1.key client1.key.pub[root@localhost cert]# cat client1.key client1.key.pubiDj9Jq/zMs3L5QKEZOJytGalyTOjk8KWcjqkohj3VFw=kNNmyu3ZYDirSBIWT2bB0fHHsb7NiPKt7FkDeUwJ7Gs=
# 客户端2私钥wg genkey > client2.key# 客户端2公钥wg genkey < client2.key > client2.key.pub# 查看生成的密钥对cat client2.key client2.key.pub[root@localhost cert]# cat client2.key client2.key.pubyDbxZkSWZhNi3M0hAuGLCIcse+lI+hoRlZ6eAwkcT0Y=4NDqtOWzNFjmP8eu8htyWIXU954H1rA+nRY4yMCfzm0=
vi /etc/wireguard/wg0.conf[Interface]PrivateKey = uPdVDbrCYfU9l4AxVhdxEYiiDj6Ourut6x2hFG6+rlU= #服务端私钥server.keyAddress = 10.0.188.1/32 #设置本机虚拟局域网IP,这个自己设置即可,不要与现有网段冲突就可以#使用 %i 作为接口名占位符,确保 FORWARD 和 NAT 规则都正确配置#注意ens160为本机网卡名称PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADEPostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADEListenPort = 51820 #注意该端口是UDP端口MTU = 1420[Peer]PublicKey = kNNmyu3ZYDirSBIWT2bB0fHHsb7NiPKt7FkDeUwJ7Gs= #client1的公钥client1.key.pub,后面需要修改为客户端生成的公钥AllowedIPs = 10.0.188.2/32 #客户端所使用的IP[Peer]PublicKey = 4NDqtOWzNFjmP8eu8htyWIXU954H1rA+nRY4yMCfzm0= #client2的公钥client2.key.pub,后面需要修改为客户端生成的公钥AllowedIPs = 10.0.188.3/32:wq! #保存退出
wg-quick up wg0 # 启动命令wg show #查看连接状态ip a #可以看到服务器多了一个wg0网卡wg-quick down wg0 #停止命令
客户端下载地址:https://www.wireguard.com/install/Windows客户端:https://download.wireguard.com/windows-client/https://download.wireguard.com/windows-client/wireguard-installer.exe
客户端安装完成后,新建隧道-新建空隧道名称:client1[Interface]PrivateKey = iDj9Jq/zMs3L5QKEZOJytGalyTOjk8KWcjqkohj3VFw= #此处为client1的私钥client1.keyAddress = 10.0.188.2/32 #此处为peer规定的客户端IPMTU = 1420DNS = 8.8.8.8, 8.8.4.4[Peer]PublicKey = y+3tI6KJ+zede+uwr8LQnCZ3jR+AjdsnkXu8q2ows2A= #此处为server的公钥server.key.pubAllowedIPs = 0.0.0.0/1, 128.0.0.0/1, ::/1, 8000::/1 #此处为允许的服务器IP,接管所有流量#AllowedIPs = 10.189.189.0/24 #改为仅内网/特定IP,假设你只想访问服务器内网Endpoint = 192.168.21.11:51820 #服务端地址:公网IP:端口PersistentKeepalive = 25 #保持心跳
#这里是win客户端,点击创建新隧道之后win客户端会自动创建公钥与私钥#编辑配置文件vi /etc/wireguard/wg0.conf,替换client1的公钥client1.key.pub为客户端自动生成的公钥:J800QHjvsiaFoiTp0cjuLu3jratU+iZnKhECkLR6T34=wg-quick down wg0 #停止命令wg-quick up wg0 # 启动命令systemctl enable wg-quick@wg0 #设置开机启动wireguard
win客户端连接成功之后验证ping 服务端的ip地址10.0.188.1要能ping通以后每次有客户端(无论是 Windows、手机还是 Linux)重装系统或重新生成密钥,都需要复制客户端生成的新公钥,粘贴到服务端的 wg0.conf 中,覆盖旧的 PublicKey。执行 wg-quick down wg0 和 wg-quick up wg0 重启服务,不需要修改 IP 或其他设置,只要公钥对上了,连接就能恢复。至此,Linux下安装配置WireGuard完成。######################################dnf install -y dnf-utils #安装工具包mkdir -p /tmp/fake #创建临时目录mkdir -p /root/yum-rpm-full-x86 #创建存储目录dnf install --installroot=/tmp/fake --releasever=10 --downloadonly --downloaddir=/root/yum-rpm-full-x86 \执行完成之后,所有的包都在/root/yum-rpm-full-x86目录,把这个目录打包yum-rpm-full-x86.tar.gz拷贝到需要安装的服务器上tar -zxvf yum-rpm-full-x86.tar.gz#只安装本地没有的包(跳过冲突),临时禁用所有已配置的远程仓库,只从本地目录安装yum localinstall ./*.rpm -y --nogpgcheck --disablerepo="*" --skip-broken#####################################