wireguard-说明和使用

项目主页
ArchWiki 相关

简介

WireGuard 是一种及其简单但快速且现代的 VPN 协议.

安装

安装 wireguard-tools 包:

1
sudo pacman -S wireguard-tools

systemd-networkd 和 NetworkManager 都为 WireGuard 接口设置提供原生支持.

使用

使用 ip link 显示的 wg0 就是 wireguard.

在 peer 上生成公钥和私钥

peer 就是那两台建立了隧道的主机.

1
$ wg genkey | tee privatekey | wg pubkey > publickey

基本检查

不带任何参数使用 wg 命令可以快速查看当前的配置.

1
# wg

此时可以 ping 通隧道的另一端.

配置持久化

可以用 showconf 来保存:

1
2
# wg showconf wg0 > /etc/wireguard/wg0.conf 
# wg setconf wg0 > /etc/wireguard/wg0.conf

示例

1
2
3
4
5
6
7
8
9
10
11
/etc/wireguard/wg0.conf

[Interface]
PrivateKey = [CLIENT PRIVATE KEY]
MTU = 1420

[Peer]
PublicKey = [SERVER PUBLICKEY]
AllowedIPs = 10.0.0.0/24, 10.123.45.0/24, 1234:4567:89ab::/48
Endpoint = [SERVER ENDPOINT]:5182
PersistentKeepalive = 25

配置一个 VPN 服务器

WireGuard 自带一个快速创建和销毁 VPN 服务器的工具 – wg-quick.

具体配置见 ArchWiki.

需要配置服务器端和客户端.

客户端的 IP 需要和 wg0server.conf 中的子网掩吗相同.

使用 wg-quick up wg0 来启用 Interface, 使用 wg-quick down wg0 来关闭.

使用 systemctl enable wg-quick@wg0 来自动启动.

如果使用 NetworkManager, 可能有必要启用 NetworkManager-wait-online.service.

查看网络连接

1
sudo netstat -ntpl

参考 B 站

VPN, Virtual Private Network 的作用是保证访问的私密. 对数据进行加密, 校验.
示意图

wireguard 是一种 VPN 技术. 其可以让连接的设备以为自己处于同一个内网中. 从上面的示意图可以看出, 这个虚拟的内网是由 wireguard 链路连接的.

wireguard 并不区分客户端和服务器端.

在任何设备上如果安装了 wireguard 都会被视为一个节点. 其既可以连接其他设备也可已被其他设备直接连接.

也就是说, 用一台拥有公网 IP 的服务器作为连接点, 使得所有连接到这台服务器的主机都可以通信.

Ubuntu 上的手动操作 (具体看文档, 已拉取到本地)

安装:

1
$ apt install wireguard resolvconf

开启 ipv4 转发, 使该服务器能够成为一个转发的服务器:

1
$ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

可以通过 sysctl -p 查看是否设置成功.

wireguard 的配置文件位于 /etc/wireguard

生成服务器上的密钥对

每一个节点需要生成一对密钥.

1
2
3
4
5
$ cd /etc/wireguard
$ chmod 0777 /etc/wireguard
$ umask 0777
$ wg genkey > server.key
$ wg pubkey < server.key > server.key.pub

最后一行是根据私钥来创建公钥.

生成客户端的密钥对

是在服务器上生成.

和上面同样的操作.

修改配置文件

[Interface] 配置的是虚拟网卡的信息.

监听端口用来判断 client 的连接.

每添加一个 peer 都要在 server 的配置文件中添加 [Peer] 块.

客户端的配置和服务器端的配置类似.

重新设置了配置文件, 需要重启 wireguard, 利用 down 和 up.

客户端的 IP 需要在 服务器端设置 (这里的 IP 是虚拟 IP).

Endpoint 是设置对端也就是服务器的 IP 和端口. 其实是我们被其他节点主动连接的时候所使用的 IP. 设置 server 是因为 server 是被主动连接的.

wireguard 使用的是 UDP 协议.

连接之后两台主机就可以通话了.

可以用 wg 命令来查看 wireguard 的连接状况.

keepalive 是尝试重连.

搭建了内网穿透就可以直接连接远端没有公网 IP 的服务器.

利用 Docker 搭建

github 相关页面
其生成的配置文件是 client 的.

在有公网的服务器创建一个 Docker, 然后用这个 Docker 访问控制页面.

手机连入

可以用手机客户端扫二维码.

自己尝试

手动配置

按照上面 司波图 的博客内容可以成功搭建.

docker

出了些小问题.

结果是我服务器的端口开放错误, 开放了另一个端口.

按照教程即可完成.


wireguard-说明和使用
http://example.com/2022/09/17/wireguard-说明和使用/
作者
Jie
发布于
2022年9月17日
许可协议