Ubuntu下WireGuard的常用操作

Wireguard的配置文件位置:

/etc/wireguard/wg0.conf

不中断服务更新配置文件:

wg syncconf wg0<(wg-quick strip wg0)

重启服务:

systemctl restart wg-quick@wg0.service

显示状态:

wg show

生成密钥对:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

启动与停止某端口:

wg-quick up wg0
wg-quick down wg0

初次安装需要开启内核的转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

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

sysctl -p

Windows中为WireGuard配置NAT的简单方法

网上在Linux使用IPtable为WireGuard进行NAT的教程很多,但却没有在Windows中的教程。

实际上在Windows中实现更加简单,但也缺乏一些自由性。下面以Windows7为例:

系统中存在两个接口:本地连接2(接入外网的LAN),test(WireGuard的接口)。

原始网络配置

在“本地连接2”的属性中,将其共享。

配置“本地连接2”的共享

共享后,此Windows7主机相当于充当了WireGuard虚拟局域网的路由器(网关),但虚拟局域网的IP只有一个(类似于真实局域网中公网IP只有一个),如果真实局域网中的终端想要访问虚拟局域网的终端,就像公网中的设备主动访问NAT内的设备一样,需要配置DMZ主机或者端口映射。

设置“端口映射”

确定后,Windows默认会将受共享接口(test)的IP地址(网关地址)改为192.168.137.1,需要手动更改为WireGuard中设定的地址,或者重新连接WireGuard,将自动更改。

Windows7的该功能可能自动开启了DHCP,关闭方法未知,忽略警告暂未发现影响。

确定是有警告弹窗

在受共享的WireGuard终端配置文件中,应将被共享真实局域网的IP段加入到AllowedIPs中。若希望全局使用WireGuard隧道连接公网,则设置0.0.0.0,同时要配置::/0防止IPv6漏出。

客户端WireGuard配置文件

重新连接WireGuard后,即可在客户端连接到真实局域网内的终端了。

注意:每次重启服务端时,都需要重新设置一次Internet连接共享!!

WireGuard架设公网点对点隧道(虚拟局域网)

WireGuard不分服务端、客户端,各端点相互平行,共同组成一个加密的虚拟局域网。(转发功能暂未学会,不能翻墙,据说基于UDP的WireGuard翻墙已被禁)。

首先,前往wireguard.com(已被墙)下载Windows客户端,TrueNAS Core集成于系统中,可直接使用。

以下是FreeBSD下的配置。

//编辑配置文件
vim /usr/local/etc/wireguard/wg0.conf
//修改sysrc参数,也可在图形界面“微调”中修改
sysrc wireguard_interfaces="wg0"
sysrc wireguard_enable="YES"
//启动、停止、重启
service wireguard start
service wireguard stop
service wireguard restart
//查看运行状态
wg
ps aux | grep wireguard

部分网络相关的常用FreeBSD指令:

//查看路由表
netstat -f inet -r -n
netstat -f inet6 -r -n
//查看进程
ifconfig wg0

配置文件的内容(可多Peer):

[Interface]
PrivateKey = {私钥}

ListenPort = {端口号}

//虚拟IP地址,不可与本地局域网地址冲突
Address = 10.100.101.1/24

[Peer]
PublicKey = {对端的公钥}
AllowedIPs = 10.100.101.2/32

[Peer]
PublicKey = {对端公钥}
AllowedIPs = 10.100.101.3/32
Endpoint = {对端地址:端口}

//心跳包间隔时间
PersistentKeepalive = 25

可使用UDP&TCP测试工具测试端口是否畅通(UDP不好用),也可使用netcat在命令行下操作(netcat集成于linux)。

WireGuard连接后,ping指令无效,因为ping基于IGMP。

TCP协议更加可靠,因为对方收到后会回复信息确认,而UDP则不会回复,延迟会低一点,但丢包更加不可控,适合视频串流等对丢包要求低,但对延迟要求高的场景。

路由器设置端口转发时,应将TCP/UDP两个都选择上。

转发的配置相关资料较少,没有在FreeBSD和Windows上的教程,在Linux上应该是基于IPtable的IP地址转发,不太难。因为WireGuard的客户端对网络的影响是全局的,缺少转发可能导致断网。

可以使用UDPSpeeder和UDP2raw来优化UDP数据的传输,一个可以通过添加冗余信息避免丢包影响,另一个可以伪装UDP数据,防止拦截。