VPN简介-2

VPN简介-2

以wireguard为例搭建一个VPN,通过VPN隧道来访问网站

环境

客户端: Window10

服务器: Debian9

服务器配置流程

安装wireguard服务

服务器使用的是腾讯云本身没有wireguard模块,需要自己安装.一是可以通过dkms去加载内核模块,二是使用wireguard源码编译一个可执行文件直接运行.第一种方法没有成功,所以这里使用第二种方法,使用wireguard-go的源码编译程序后上传到服务器(wireguard-go不需要cgo,交叉编译较为容易),此处省略编译上传过程

wireguard主程序是一个独立服务,启动时无法配置.需要通过命名管道去配置一些参数,所以还需要安装一个工具去了连接管道配置参数,这里通过添加apt源安装(服务器是树莓派需要下载wireguard-tools的源码编译)

1
2
3
4
5
6
7
sudo sh -c "echo 'deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main non-free contrib' > /etc/apt/sources.list.d/buster-backports.list"

apt update

apt install wireguard

wg

安装成功后可以通过wg命令去配置管道

配置wireguard服务

1 运行wireguard

wireguard为编译后上传的可执行文件

1
2
./wireguard wg0
# ./wireguard -f wg0 可以输出日志方便查看

2 配置虚拟网卡ip

1
2
ip address add dev wg0 192.168.10.1/24
ip address

3 wireguard配置文件

生成服务端密钥

1
wg genkey | tee privatekey | wg pubkey > publickey

wireguard配置可以使用命令或文件,这里使用配置文件

wg.conf

1
2
3
4
5
6
7
[Interface]
PrivateKey = 0FWdp50XUeH7XFrSA9e1JrZvzytikKgCEyH2g7Bg20o=
ListenPort = 50000

[Peer]
PublicKey = poYI/bSXkohf879nUQ4jsNUTGZ4pPiseTePuQ1W4ZyU=
AllowedIPs = 0.0.0.0/0

注意Peer的公钥是由客户端产生的

开启虚拟网卡

1
2
ip link set up dev wg0
ip link

设置wireguard配置,设置可以随时更改

1
2
wg setconf wg0 wg.conf
wg

配置NAT规则

开启内核转发

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

开启SNAT转发(只是通过隧道组建局域网可以不开启转发)

1
2
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -L -t nat

客户端配置流程

下载wireguard-windows添加隧道配置,这里产生的公钥需要为上面服务端的peer公钥

配置文件如下

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = kFkmwxCPPtjcfe28DzynqST67+tPuLULPWdhIPDExmo=
Address = 192.168.10.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = zWbkynXpzm1oW44dz8eguba5dO3MluJGhBkp7OIozgQ=
AllowedIPs = 0.0.0.0/0
Endpoint = {server_ip}:50000
PersistentKeepalive = 20

全部转发需要注意DNS

简单通过ping测试

1
2
ping 192.168.10.1
ping www.baidu.com

ping有回应代表成功,如果没有回应则需要使用wireshark和tcpdump分别在客户端服务端抓包检验一下数据流是否正常,此处略过

总结

以上的配置使本机所有的流量都走隧道,实际可以根据情况进行配置.通过wireshark抓包也可以验证这一点.如果只是组建局域网,则只需要再服务端添加新的Peer数据,只需内核转发不需要设置SNAT的规则