初衷
- 解决云服务器贵的问题
- 解决云服务器部署麻烦问题
- 解决云服务器环境搭建网络慢问题
实现原理
- 通过WireGuard连通公网ip服务器跟内网ip服务器
- 通过公网ip服务器nginx反向代理内网ip服务器
- 访问公网ip服务器域名实际上访问了内网ip服务器端口
测试环境
公网ip服务器
- 操作系统:debian_12.5
- WireGuard:wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/
- nginx:nginx/1.22.1
- 公网ip:8.217.127.19
- 内网ip:eth0 172.18.103.185/20
- 内网ip服务器
- 操作系统:debian_12.5(Oracle VM VirtualBox虚拟机桥接网络)
- WireGuard:wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/
- nginx:nginx-1.24.0(编译安装)
- 公网ip:无
- 内网ip:enp0s3 192.168.1.8/24
- DNS:192.168.1.1, 114.114.114.114
- 第三方客户端
- 操作系统:win10(电信光猫)
- WireGuard:无
- nginx:无
- 公网ip:无
- 内网ip:192.168.1.5
- DNS:192.168.1.1, 114.114.114.114
软件安装及配置
- 公网ip服务器
- WireGuard
apt update
apt install wireguard
cd /etc/wireguard/
umask 077; wg genkey | tee privatekey_s | wg pubkey > publickey_s
umask 077; wg genkey | tee privatekey_192_168_1_8 | wg pubkey > publickey__192_168_1_8
vim /etc/sysctl.conf
#添加
net.ipv4.ip_forward = 1
#生效
sysctl -p
vim /etc/wireguard/wg0.conf
#添加 注:修改配置前先停止运行wg-quick down wg0
[Interface]
Address = 172.18.103.185/20
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820#privatekey_s
PrivateKey = cBSjtbk31HuCkXNJKTA4clRwTd+ojHlrhXNDmsDzymY=
[Peer]
PublicKey = bW4lJJMBDKJMU18i8Sly+cxi6aixptOXOLcnhhGfyzQ=
AllowedIPs = 192.168.1.9/32[Peer]
#publickey__192_168_1_8
PublicKey = Q6LDJppJKyOU/qO6Y9JJQnc/kS/cAqqu5TjEkHapKnI=
AllowedIPs = 192.168.1.8/32#启动
wg-quick up wg0
- nginx
apt update
apt install nginx
vim /etc/nginx/sites-enabled/192_168_1_8
#添加
server { listen 8080; #有域名后改为80 server_name localhost; #有域名后改为域名 index index.html; location / { proxy_pass http://192.168.1.8:80/; } }service nginx restart
- 内网ip服务器
- WireGuard
#安装同上不用生成秘钥
#配置如下
[Interface]
Address = 192.168.1.8/24
DNS = 192.168.1.1, 114.114.114.114
#privatekey_192_168_1_8
PrivateKey = EJE36sGBmwFOgBgXhE/9EQss2DkiGDbbozvcJHOL8ks=
#ListenPort = 51820
[Peer]
#publickey_s
PublicKey = sQ87BE5uQijxGrlP79wu4MHGRSe99qsKaQ+/YEv3M0s=
AllowedIPs = 172.18.103.185/32
#AllowedIPs = 0.0.0.0/0
Endpoint = 8.217.127.19:51820
#启动
wg-quick up wg0
- nginx
#上线环境
测试
- 公网ip服务器
- ping 192.168.1.8
- wg
- 内网ip服务器
- ping 172.18.103.185
- wg
- 第三方客户端
- ping 192.168.1.8
- ping 8.217.127.19
- 浏览器访问http://192.168.1.8/
- 浏览器访问http://8.217.127.19/
- 浏览器访问http://8.217.127.19:8080/ #使用域名则访问域名
总结
- 实际使用中请将wg-quick@wg0添加为服务
- 已知bug
- 客户端浏览器访问公网ip8080端口会504,但内网服务器ping一下公网ip服务器的内网ip后又正常
- 参考命令
- 重启nginx服务:service nginx restart
- 启用wg0网卡:wg-quick up wg0
- 停用用wg0网卡:wg-quick down wg0
- 参考文档