由于家中内网服务器没有公网IP,所以需要一台拥有公网IP的云服务器做nat转发。
对于云服务器的带宽来说,是越大越好,但是也要考虑费用问题。普通的4M带宽基本是够用了。下载家中Nas中的文件可以达到400kb左右。


在云服务器中安装配置wireguard

参考文档:How To Set Up WireGuard on Ubuntu 20.04
官方文档:https://www.wireguard.com/quickstart/


更新apt源并安装wireguard

1
2
apt update
apt install wireguard-tools

通过wg命令生成公私钥

[!tip]
其中privatekey,publickey可以使用便于记录的文件名称。

1
2
3
4
5
6
7
wg genkey > privatekey

wg pubkey < privatekey > publickey

cat privatekey

cat publickey

创建wg的配置文件

1
vim /etc/wireguard/wg0.conf

配置文件内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Interface]
Address = 192.168.1.1/32
ListenPort = 5998
PrivateKey = ********************************
PreUp = echo WireGuard PreUp
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;echo WireGuard PostUp
PreDown = echo WireGuard PreDown
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;echo WireGuard PostDown

# local Server
[Peer]
PublicKey = ********************************
AllowedIPs = 192.168.2.1/32, 192.168.0.0/24

# laptop
[Peer]
PublicKey = ********************************
AllowedIPs = 192.168.3.1/32

配置文件内容注释

Interface配置
配置名称 注释
Address 本服务器想要设置的虚机IP地址
ListenPort 监听端口可以使其他设备通过公网IP家端口连接本服务器
PrivateKey 通过wg命令生成的私钥内容
PostUp/PostDown 其中的eth0需要配置为实际的网卡名称,此处命令用于实现IP转发

Peer配置
配置名称 注释
PublicKey 连接设备的公钥,同样通过wg命令生成
AllowedIPs 允许其他设备连接的IP地址。

此公钥为需要连接设备的公钥,比如我的笔记本想要连接此服务器,我需要通过生成公私钥的方式再次为我的笔记本生成密钥对,并把我的公钥放在服务器的配置文件中,而本地笔记本的配置文件如下,需要使用笔记本生产的私钥去连接公钥访问。这里配置的不是服务器的公钥!!!


笔记本配置内容如下:

配置时一定要注意密钥对是一一对应的,Interface中的私钥一定是本设备的私钥,而Peer中的公钥一定是对方设备的公钥。

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = ********************************
Address = 192.168.3.1/32

[Peer]
PublicKey = ********************************
AllowedIPs = 192.168.1.1/32, 192.168.2.1/32, 192.168.0.0/24
Endpoint = cloud-server-public-ip:5998
PersistentKeepalive = 16


通过制定配置文件启动Wireguard服务

1
systemctl start wg-quick@wg0

配置完成后,笔记本中打开Wireguard代理,就可以在任意网络中访问到云服务器了

注意:只是访问到云服务器,以及同样开启Wireguard的其他设备服务器,并不能实现连接家中网络的任意设备,如果要实现连接家中网络的任意设备,需要进行以下配置,将家中的某台服务器当作nat网关实现流量转发。


为本地服务器配置Wireguard

安装操作同云服务器一样,只是配置文件有差别!!!
同样需要再次生产密钥对!!!

配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Interface]
Address = 192.168.2.1/32
ListenPort = 5998
PrivateKey = ********************************
PreUp = echo WireGuard PreUp
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens34 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens34 -j MASQUERADE;echo WireGuard PostUp
PreDown = echo WireGuard PreDown
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens34 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens34 -j MASQUERADE;echo WireGuard PostDown

# CloudServer
[Peer]
PublicKey = ********************************
AllowedIPs = 192.168.1.1/32, 192.168.3.1/32
Endpoint = cloud-server-public-ip:5998
PersistentKeepalive = 16

通过制定配置文件启动Wireguard服务

1
systemctl start wg-quick@wg0

配置完成

做完上述操作后,便可以实现内网打通,随时访问家中的服务器以及NAS资源了。


关于MacOS可以实现按需访问

[!note]在MacOS中可以实现按连接Wifi的SSID不同来自动连接Wireguard VPN,设置之后可以实现当断开家中Wifi时自动开启Wireguard,回到家中自动断开,直接通过内网访问。

开启方法如下:

编辑Wireguard配置文件,按需选择Wi-Fi,输入你的WIFI名称即可。