WireGuard安装配置教程

WireGuard安装配置教程

  • 最近更新2023年09月01日

大家都知道,最近管家对梯子管理的太严格,准备去浏览一下国外的技术,经常出现梯子折掉的情况,还好有一个朋友LK给我推荐WireGuard,所以准备重新支起梯子。WireGuard是一个通过UDP协议,实现端对端的连接,更加安全的保护梯子,具体的优点大家自己查询吧,我只说一个字“很快”能比正常的速度快上1/3,那我们开始吧。

一、环境介绍

服务器:Ubuntu16.04 x64

客户端:Windows7

虽然写了服务器、客户端,但需要大家知道的是,WireGuard并没有强调服务器与客户端的,只在于是谁连接了谁,我们这里使用Windows7连接Ubuntu,所以这里标明Ubuntu为服务器,Windows7为客户端。

二、Windows7下Tunsafe安装及密钥生成

我们所使用的客户端是Windows7,可以使用Tunsafe客户端,下载地址:“https://tunsafe.com”。软件安装过程就略过,软件打开后界面如下:

可以使用客户端工具来生成公钥与么钥。点击客户端“File”菜单,选择“Generate Key Pair…”项,点击“Randomize”按钮来生成客房端公钥与私钥,如下图所示。

客户端私钥:aL541p6k4ys1jhhWV+dFIK4MSogdMoGWnoJCW40PeW0=

客户端公钥:WWwXgCaptYXGsjRSjRRRiP3zYkkRthECHUPadqh7LTM=

三、Ubuntu下WireGuard安装

1、安装WireGuard

WireGuard官网已经给出了安装教程,大家可以作为参考,网址为:“https://www.wireguard.com/install/”。

add-apt-repository ppa:wireguard/wireguard
apt-get update
apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)

 

2、生成服务器端密钥

在安装成功后,在/etc目录下,就会创建wireguard文件夹。接下来进入到目录下,生成服务器端密钥。

cd /etc/wireguard/
umask 077
wg genkey | tee server_private_key | wg pubkey > server_public_key

 

生成完成后,就可以看到当前路径下有“server_private_key”及“server_public_key”2个文件。

3、创建服务器配置文件

在/etc/wireguard/下创建wg0.conf文件。

vi /etc/wireguard/wg0.conf

 

文件内容为:

[Interface]
Address = 10.200.200.1/24
SaveConfig = true
PrivateKey = 服务器的私钥(在服务器上生成的server_private_key文件)
ListenPort = 51820

[Peer]
PublicKey = 客户端的公钥(这个是上面客户端生成的公钥Public Key)
AllowedIPs = 10.200.200.2/32

 

刚刚建立的wg0.conf主要是为了wg0这个虚拟网卡的配置文件,其中,

[Interface]:服务器端配置开始标志

Address:为服务器本机IP地址

SaveConfig:为true时,有客户端连接时,保存状态信息,自动保存到wg0.conf文件

PrivateKey:为服务器的私钥

ListenPort:为服务器监听的端口号51820

[Peer]:客户端开始标志,(多个客户端,会有多个配置连接)

PublicKey:为客户端的公钥,这个需要客户端生成,客户端生成完成后,需要填写

AllowedIPs:允许客户端连接的地址

服务器配置文件完整截图如下:

4、允许IP转发

在服务器中,要加入IP转发,要不然会出现客户端不能上网,修改/etc/sysctl.conf文件。

vi /etc/sysctl.conf

 

将配置文件中“net.ipv4.ip_forward=1”前面的“#”号去掉。

修改完成后,保存后,重新启动服务器,或者直接用使用如下命令操作。

sysctl -p
echo 1 > /proc/sys/net/ipv4/ip_forward

 

5、修改防火墙规则

设置iptables列表的内容,需要配置接受的协议及端口号,数据转发也需要它的支持。

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 51820 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -s 10.200.200.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -s 10.200.200.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o ens3 -j MASQUERADE

 

这里特别需要说明的是,最后一行中的“ens3”为服务器本地网卡的名称,这个需要根据你自己的网卡名称而定。配置完成后,将其保存起来。

apt-get install iptables-persistent
systemctl enable netfilter-persistent
systemctl start netfilter-persistent
netfilter-persistent save

 

6、DNS服务器配置

这一步可以配置,也可以不用配置,主要是因为使用公共DNS,存在泄漏IP地址的情况,所以我们自己建立DNS,让我们隐藏在VPS后面,从而加强我们的安全,下面的语句要逐条执行。

apt-get install unbound unbound-host
curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache

 

接下来配置unbound。

vi /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf

 

将原有内容注释后,修改配置文件内容如下:

server:
num-threads: 4

#允许日志
verbosity: 1

#根服务器列表
root-hints: "/var/lib/unbound/root.hints"

#DNSSEC的根密钥文件
auto-trust-anchor-file: "/var/lib/unbound/root.key"

#允许查询任意网站的dns
interface: 0.0.0.0
max-udp-size: 3072

#仅允许本机和10.200.200.0/24段ip访问
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.1 allow
access-control: 10.200.200.0/24 allow

#不进入公共dns服务器列表
private-address: 10.200.200.0/24

#隐藏信息
hide-identity: yes
hide-version: yes

#强制DNSSEC
harden-glue: yes
harden-dnssec-stripped: yes
harden-referral-path: yes

#Add an unwanted reply threshold to clean the cache and avoid when possible a DNS Poisoning
unwanted-reply-threshold: 10000000

#验证地址,记录dns投毒事件(Have the validator print validation failures to the log.)
val-log-level: 1

#Minimum lifetime of cache entries in seconds
cache-min-ttl: 1800

#Maximum lifetime of cached entries
cache-max-ttl: 14400
prefetch: yes
prefetch-key: yes

 

配置完后,开启服务,并设置为开机自启动。

chown -R unbound:unbound /var/lib/unbound
systemctl enable unbound
systemctl start unbound

 

7、启动虚拟网卡

接下设置一下网卡的配置文件,以及开启网卡,并设置为服务,开机自启动。

chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf
wg-quick up wg0
systemctl enable wg-quick@wg0.service

 

四、Windows7下客户端的配置

软件打开后界面如下:

接下来点击“File”菜单,选择“Edit Config File”项或界面中的“Edit Config”按钮,在弹出的配置文件,删除所有内容,修改如下:

[Interface]
Address = 10.200.200.2/32
PrivateKey = 客户端的私钥
DNS = 10.200.200.1

[Peer]
PublicKey = 服务器的公钥
Endpoint = 服务器的物理ip地址:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21

 

接下来,说明一下配置文件各项的内容:

[Interface]:客户端配置开始部分

Address:客户端IP地址(也就是本机地址)

PrivateKey:客户端私钥(服务端生成的client_private_key文件)

DNS:服务器IP地址作为DNS

[Peer]:服务器端的配置信息

PublicKey:服务器的公钥(服务端生成的server_public_key文件)

Endpoint:服务器的IP地址及端口号

AllowedIPs:0.0.0.0/0为允许所有IP地址通讯,如果单个IP地址,可以写多个用逗号隔开,默认写客户端的IP地址

PersistentKeepalive:用来保持连接检查的,每过25s会自动检查连通性,如果IP有变化,也是通过这个自动更新endpoint

我们点击界面上的“Connect”即可以连接到服务器,如下图所示。

此时我们再测试一下是否可以正常访问Google,如下图所示。

特别说明一下,如果我们对服务器配置文件做修改,需要先关闭网卡后,再进行配置文件的修改,修改完成后,开启网卡,以下这两个命令主要是用来关闭或启动网卡的方法。

# 关闭虚拟网卡
wg-quick down wg0

# 启动虚拟网卡
wg-quick up wg0

 

附加说明,如果你还是连接不上,你可以把服务器重新启动一下。

 

分享到 :
第7章 定时器的应用
上一篇 2018-10-16
7.2 定时器的介绍
2018-10-16 下一篇
相关推荐

回复 takethatwow 取消回复

登录... 后才能评论

评论(14)

  • takethatwow 游客 2018年11月14日 下午4:47

    在创建密钥时,为什么会提示server_public_key: Permission denied

    • lixh 永久VIP 回复 takethatwow 2018年11月15日 上午10:03

      应该是你的系统本身权限的问题 sudo一下就行了。或者将文件夹权限修改一下。

  • takethatwow 游客 2018年11月17日 下午10:59

    谢谢您的指导

    请问这wg0这块虚拟网卡,实在wireguard安装完成后自动生成,还是需要手动创建?

    我没有去购买VPS,我是在VMware下模拟这个实验,VMware虚拟了一台部署Unbuntu的服务器,并在其上安装了wireguard,可是看不到wg0 这块虚拟网卡

  • takethatwow 游客 2018年11月18日 上午12:09

    不好意思,打扰您,对linux真的是一窍不懂,我是从事路由和交换行业的,就是对wireguard这个新型VPN软件好奇,所以研究下,我自己新建了wg0虚拟网卡,可是客户端在连接时,一直是连接不通,能看到ens3有数据转发,但是在wg0上看不到,不知道您能不能再指点下,对linux这个系统真是不懂。
    我重启了服务器,重启后wg0这个虚拟网卡直接就丢失了,我还得使用下面三条命令开启
    ip link add wg0 type wireguard
    ip addr add 10.200.200.1/24 dev wg0
    ip link set wg0 up

    • lixh 永久VIP 回复 takethatwow 2018年11月27日 上午11:26

      是不是iptable那的网卡名写错了。

    • lixh 永久VIP 回复 takethatwow 2018年11月27日 上午11:28

      如果有什么问题可以加我QQ:7753041(备注一下你来自这里)我可以帮你一下。

  • takethatwow 游客 2018年11月18日 上午12:12

    防火墙那怎么写,是不是我写错了,我是直接将您写好的iptable粘贴到vi /etc/wireguard/wg0.conf下,网卡名字我修改了,这iptable 是不是前面还要写 postup ?

  • takethatwow 游客 2018年11月18日 上午12:20

    关闭网卡后,在开启 :sudo wg-quick up wg0
    提示:wg-quick: `wg0′ already exists

  • eddy 游客 2018年11月18日 下午12:45

    请教一下遇到的问题。
    我都是按着你的配置来的,但是客户端连接的时候卡在握手上,好像服务端没有响应
    Retrying handshake, attempt 2…
    系统也重启了,UDP端口我也确认打开了,走的IP地址。系统环境和你的一样。
    你有什么思路吗?

    • lixh 永久VIP 回复 eddy 2018年11月21日 下午4:34

      内部IP可以与我的一样,但是你得有自己的服务才行的。

  • eddy 游客 2018年11月18日 下午1:07

    好吧,问题找到了,客户端的私钥填错了。文章中客户端配置文件里面的私钥后面括号里面的说明写的有误。

  • 人到中年 游客 2020年3月31日 上午1:59

    终于遇到了高手!网上教程为什么那么简单,俺折腾2台WIN7机子怎么都不行……用TunSafe申请它的配置文件,导入后不能连接,就一直Retrying handshake, attempt 3…非得俺自己挂个VPN才能,关闭VPN后,虽然说可以连接了,但是根本打不开任何网站……
    换wireguard吧,,网上教程“点击 Add Tunnel -> Add empty tunnel…..出现可编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来”??这个是哪来的?
    后来按照某教程,自己生成配置文件,自己拷贝进去,然后导入,连接服务器绿色了。但是,仍然不能上网!郁闷……

  • 人到中年 游客 2020年4月11日 下午12:51

    +不上QQ啊大侠,一直没反应。。。你+我一蛤 1662046497?