u1timate
Published on 2024-06-01 / 316 Visits
0

wireguard家庭部署

wireguard部署

网络拓扑

我这里的路由器不支持部署wireguard,如果路由器是Openwrt,可以直接在Openwrt上直接部署

image-puhu.png

服务器部署

  • 开启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网关,如下

image-yqss.png

我们知道如果不指定路由的话,流量是默认走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
  • 客户端测试

image-fadj.png

在家庭内部主机上测试是否能够正常访问公网服务器

  • 公网服务器测试

image-duke.png

在公网服务器上测试是否能联通家庭内部的路由器