[实践]wireguard安装和配置

什么是WireGuard

WireGuard 是一种现代的、简单易用、性能高效的虚拟私人网络协议,可提供更好的安全性和更快的速度。

WireGuard的主要特点包括:

  1. 简洁性:设计简单,代码量小,便于审计和维护。
  2. 性能高效:相较于其他虚拟私人网络协议,WireGuard具有更低的延迟和更高的数据传输速率。
  3. 安全性:使用了最新的加密技术,提供了强大的安全保证。
  4. 易于配置:配置文件简单易懂,易于设置和管理。
  5. 跨平台兼容性:支持多种操作系统,包括Linux、Windows、macOS、Android和iOS。
  6. 移动友好:特别适合在移动设备上使用,因为它对电池寿命的影响较小。
  7. 网络穿透能力强:能够较好地处理NAT(网络地址转换)和防火墙穿透问题。
  8. 模块化设计:可以作为内核模块或用户空间应用程序运行,灵活适应不同的使用场景。
  9. 动态密钥旋转:支持密钥的动态生成和更新,增强了安全性。
  10. 多路复用:单个虚拟私人网络隧道可以同时处理多个数据流,提高了效率。

Server Install & Config

Ubuntu 20.04.2 install wireguard

系统版本

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
sudo apt install wireguard

生成私钥&公钥

WireGuard通过wg genkey 生产私钥,然后在通过wg pubkey生成公钥。

wg genkey > privatekey
wg pubkey < privatekey > publickey
mv privatekey publickey /etc/wireguard

开启内核IP转发

WireGuard通过系统内核进行数据包转发,需要打开IPV4地址转发功能

echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
/etc/init.d/procps restart

配置文件

切换进WireGuard目录下(/etc/wireguard),创建一个配置文件wg0.conf

cd /etc/wireguard
vim wg0.conf

wg0.conf文件内容如下:

[Interface]
# 本机密钥
PrivateKey = fOqpewDm2F4rMS0aW5DQW2S9ixnc= # 上一步生成的publickey
# 本机地址
Address = 192.168.1.1/24 # 定义wg网络的网管地址
# 监听端口
ListenPort = 9993 # 定义wg对外的端口,可修改
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens0 -j MASQUERADE

# 以下两个可选
DNS = 1.1.1.1
MTU = 1420

# 客户端配置
# Client1_192.168.1.11
[Peer]
PublicKey = Client1公钥,在客户端可看到
AllowedIPs = 192.168.1.11/32

# Client2_192.168.1.12
[Peer]
PublicKey = Client2公钥,在客户端可看到
AllowedIPs = 192.168.1.12/32

**注意:PostUpPostDown中的ens0这个网卡要根据自己的实际来

目录结构:

├── etc
│   └─ wireguard
│      ├─ down_wg.sh
│      ├─ privatekey
│      ├─ publickey
│      ├─  up_wg.sh
│      └─ wg0.conf

启动&停止

wg-quick

cd /etc/wireguard
# 启动
wg-quick up wg0
# 停止
wg-quick down wg0

systemctl

# 启动
systemctl start wg-quick@wg0
# 设置开机自启动
systemctl enable wg-quick@wg0
# 停止
systemctl stop wg-quick@wg0
# 关闭开机自启动
systemctl disable wg-quick@wg0

使用wg命令查看当前Wireguard链接情况

root@local:/# wg
interface: wg0
  public key: yX5gFNzlcgtHVG4DGeJJ5AoHWddpv8HA4J7hhCPj1ks=
  private key: (hidden)
  listening port: 9993

peer: yX5gFNzlcgtHVG4DGeJJ5AoHWddpv8HA4J7hhCPjYx9ik=
  endpoint: 1.1.1.1:35935
  allowed ips: 192.168.1.12/32
  latest handshake: 1 minute, 25 seconds ago
  transfer: 15.69 KiB received, 12.02 KiB sent

Client Install & Config

下载

访问 https://www.wireguard.com/install/ 根据操作系统选择合适的客户端。

Config

Windows & macOS Client GUI Config

打开WireGuard客户端,点击添加空隧道

这里需要注意这个 公钥(publickey)私钥(privatekey)
公钥需要放在服务器wg0.conf [Peer]PublicKey = <client privatekey>

你的客户端配置看起来应该是这样的

# 示例
[Interface]
# 这里的PrivateKey不要动,是你本地的
PrivateKey = 4Fg7VJJnvt3iZwu5bYrmeDZoAz3BD7y1hq0+jFACMmo=
# IP地址,这是你要给这个客户端分配的ip
Address = 192.168.1.12/24
# 以下两个可选
DNS = 1.1.1.1
MTU = 1420

[Peer]
# 这是服务器那边的PublicKey可以看服务器上生成的PublicKey
PublicKey = hZyrKY1pQ+0Y45okw+IwTAOENA9pIhJ2dRJUubxCpDo=
# 属于哪个IP段,也可以配置成:AllowedIPs = 0.0.0.0/0,::0/0
AllowedIPs = 192.168.1.0/24
# 对应的WireGuard服务器地址与端口
Endpoint = xxx.xxx.xxx.xxx:9993
# 心跳频率
PersistentKeepalive = 25

配置完成后点击保存即可。

**提示:配置完成记得重启服务端

Linux

参考WireGuard install页面安装WireGuard,总体上和服务端的安装是一致的。安装好后,将配置文件放入对应目录,使用与服务端相同命令启停

其它客户端设置

其它客户端设置可以参考:写的很详细https://cn.linux-console.net/?p=31334

wireguard-ui Install & Config

使用图形化界面使用WireGuard

从github下载wireguard-ui-vx.x.x-linux-amd64.tar.gz

root@ztncui:/etc/wireguard/wg_gui# wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2
-linux-amd64.tar.gz
--2024-08-01 13:44:18--  https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
Resolving github.com (github.com)... 172.67.207.252, 104.21.61.90, 2606:4700:3036::ac43:cffc, ...
Connecting to github.com (github.com)|172.67.207.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10604455 (10M) [application/octet-stream]
Saving to: ‘wireguard-ui-v0.6.2-linux-amd64.tar.gz’

wireguard-ui-v0.6.2-linux-amd64.t 100%[============================================================>]  10.11M  1.17MB/s    in 9.3s    

2024-08-01 13:44:29 (1.09 MB/s) - ‘wireguard-ui-v0.6.2-linux-amd64.tar.gz’ saved [10604455/10604455]

解压

tar -zxvf wireguard-ui-v0.6.2-linux-amd64.tar.gz

使用./wireguard-ui运行wireguard-ui

root@ztncui:/etc/wireguard/wg_gui# ./wireguard-ui 
Wireguard UI
App Version     : v0.6.2
Git Commit      : 99104e429557a4cd6bda4b0c2550a656cdfe9bb7
Git Ref         : refs/tags/v0.6.2
Build Time      : 08-01-2024 05:47:55
Git Repo        : https://github.com/ngoduykhanh/wireguard-ui
Authentication  : true
Bind address    : 0.0.0.0:5000
Email from      : 
Email from name : WireGuard UI
Custom wg.conf  : 
Base path       : /
Subnet ranges   : 
Valid subnet ranges: 
⇨ http server started on [::]:5000

通过web访问IP:5000 初始用户名和密码是admin请及时修改

自动重启 WireGuard 守护进程

WireGuard-UI只负责配置生成。您可以使用 systemd 来监视更改并重新启动服务。
下面是一个示例:

使用 systemd

创建 /etc/systemd/system/wgui.service

cd /etc/systemd/system/
cat << EOF > wgui.service
[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path
EOF

创建 /etc/systemd/system/wgui.path

cd /etc/systemd/system/
cat << EOF > wgui.path
[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target
EOF

应用

systemctl enable wgui.{path,service}
systemctl start wgui.{path,service}

使用 openrc

创建 /usr/local/bin/wgui 文件并赋予执行权

cd /usr/local/bin/
cat << EOF > wgui
#!/bin/sh
wg-quick down wg0
wg-quick up wg0
EOF
chmod +x wgui

创建 /etc/init.d/wgui 文件并赋予执行权

cd /etc/init.d/
cat << EOF > wgui
#!/sbin/openrc-run

command=/sbin/inotifyd
command_args="/usr/local/bin/wgui /etc/wireguard/wg0.conf:w"
pidfile=/run/${RC_SVCNAME}.pid
command_background=yes
EOF
chmod +x wgui

应用

rc-service wgui start
rc-update add wgui default

Wiki

更多使用说明 请查阅项目官方wiki 👉 https://github.com/ngoduykhanh/wireguard-ui/blob/master/README.md

附加题

麒麟V10(Kylin V10)安装wireguard

NAME="Kylin Linux Advanced Server"
VERSION="V10 (Lance)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Lance)"
ANSI_COLOR="0;31"
4.19.90-52.22.v2207.ky10.x86_64

开启内核IP转发

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

不重启系统立即生效,使用sysctl重新加载配置:

sudo sysctl -p

wireguard-dkms

dnf install https://download.copr.fedorainfracloud.org/results/fcsm/wireguard/centos-stream-8-x86_64/06141888-wireguard-dkms/wireguard-dkms-1.0.20220627-3.el8.noarch.rpm -y

wireguard-tools

dnf install https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/w/wireguard-tools-1.0.20210914-1.el8.x86_64.rpm -y

转载请注明出处
Copyright © 豆子林克 DOUZI.LINK 版权所有
除特别申明外,本内容版权遵循CC-BY-NC-SA协议规定

posted @ 2024-08-01 13:06  吴诺克  阅读(1869)  评论(0编辑  收藏  举报
Copyright © 豆子林克 DOUZI.LINK  版权所有. 除特别申明外,本站原创内容版权遵循 CC-BY-NC-SA 协议规定