wireguard部署
网络拓扑
我这里的路由器不支持部署wireguard,如果路由器是Openwrt,可以直接在Openwrt上直接部署
服务器部署
- 开启IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
- 安装wireguard
apt install wireguard
- 生成秘钥
wg genkey | tee server_privatekey | wg pubkey > server_publickey
- 配置wireguard
在 /etc/wireguard
中添加配置文件,这里使用 wg0.conf
[Interface]
PrivateKey = # 填写本机的privatekey 内容
Address = 10.250.8.1/32
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 33306 # 注意该端口是UDP端口
DNS = 114.114.114.114
MTU = 1420
[Peer]
PublicKey = # 填写对端的publickey 内容
AllowedIPs = 10.250.8.0/24,10.1.1.0/24
PostUp这一行定义了在 VPN 接口 wg0
启动后要执行的命令。具体来说:
iptables -A FORWARD -i wg0 -j ACCEPT
:允许所有从 wg0
接口进入的流量。
iptables -A FORWARD -o wg0 -j ACCEPT
:允许所有从 wg0
接口出去的流量
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
:内网设备的流量在通过 eth0
接口访问外网时,会被伪装成 eth0
接口的 IP 地址,从而实现内网设备通过外网访问的功能。没有这条 wg0
网卡的流量将无法正常访问公网。
AllowedIPs 我理解的是会在本地根据这个属性新建路由, 让指定范围的ip走wg0网关,如下
我们知道如果不指定路由的话,流量是默认走default的,导致无法连通。
- 启动
# 关闭
wg-quick down wg0
# 启动
wg-quick up wg0
# 设置开机自动
systemctl enable wg-quick@wg0
- 查看状态
wg
家庭中转服务器配置
- 开启IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
- 安装wireguard
apt install wireguard
- 生成秘钥
wg genkey | tee client_privatekey | wg pubkey > client_publickey
- 配置wireguard
在 /etc/wireguard
中添加配置文件,这里使用 wg0.conf
[Interface]
# Dev 的私钥
PrivateKey =
# Dev 的 WireGuard 地址
Address = 10.250.8.10/32
DNS = 10.1.1.252
MTU = 1420
[Peer]
# 公网服务器的公钥
PublicKey =
# 允许 WireGuard 内网互通
AllowedIPs = 10.250.8.0/24
# Master 的公网地址 + WireGuard 监听端口
Endpoint = test.cc:33306
# 内网服务器(无公网 IP)要打开这个选项,否则会出现无法连接的问题,更详细的信息参见
# https://www.wireguard.com/quickstart/
PersistentKeepalive = 25
这里AllowedIPs指定10.250.8.0/24的原因是,我只想这个网段的流量走wg0,其他的流量还是默认走家庭的路由器。
ps:如果配置0.0.0.0/0 那么所有的流量都将从wg0网关传输,这个一般在外面用手机连接wifi的时候用的较多。 所有流量加密从公网服务器走。
DNS可以根据需要配置,如果想使用家庭内部的DNS,则直接配置家庭内部的DNS服务器地址。 这样可以解析内网的域名。
- 启动
# 关闭
wg-quick down wg0
# 启动
wg-quick up wg0
# 设置开机自动
systemctl enable wg-quick@wg0
- 客户端测试
在家庭内部主机上测试是否能够正常访问公网服务器
- 公网服务器测试
在公网服务器上测试是否能联通家庭内部的路由器