本文实现三台机器的互联,一台server端,二台客户端,系统均为win,server win10, client 一台win7,一台win10,开源地址:可以下载windows ,mac ,linux ,android各种版本

WireGuard · GitHub

 我们下使用的是wireguard-windows版本

windows版本这个既可以当服务端,也可以当客户端来用。首先我们配置一下服务端

配置如下:

 服务段配置如下:

[Interface]
PrivateKey = gKyDkJ17/xrc/8X7RQDiJpnVMQoCMGkXGbvonLntxXg=
ListenPort = 55555
Address = 10.254.0.1/24
[Peer]
PublicKey = +iYeKrWo54FskCVmix1rLOXWfnnO4FPnS0J2SNZcWkU=
AllowedIPs = 10.254.0.2/32

[Peer]
PublicKey = osB5o/qRjglwcnmCCHEAPk23G23l/XAWJoRCnjfnDAI=
AllowedIPs = 10.254.0.3/32

 Client2端如下

[Interface]
PrivateKey = 4Gp4c+SNuZ2HAfD2qQ4JxyTF+OhW+WqE0A/mKLUZa3Y=
Address = 10.254.0.2/32
DNS = 114.114.114.114
[Peer]
PublicKey = wpCeLCeoTsV9Q3VG7vJnklNxf3qAt53S0vyMPSVaGwA=
AllowedIPs = 0.0.0.0/0
Endpoint = 10.10.10.11:55555
PersistentKeepalive = 25

Client3端如下

[Interface]
PrivateKey = qANM2T7N/675+zFyRucuOGBtRIegLoTJphdXoKiJAXo=
Address = 10.254.0.3/32
DNS = 114.114.114.114
[Peer]
PublicKey = wpCeLCeoTsV9Q3VG7vJnklNxf3qAt53S0vyMPSVaGwA=
AllowedIPs = 0.0.0.0/0
Endpoint = 10.10.10.11:55555
PersistentKeepalive = 25

这样当client2,3连通时,他们所有的IP就都走server了。但是发现打开baidu.com打不开,还要在server上面设定一下

1, 管理员 身份打开PowerShell(一定是powershell哦)

2,查找刚创建的虚拟交换机的接口索引。

可以通过运行 Get-NetAdapter 来查找接口索引

你的输出应类似下面的形式:

3,使用 New-NetIPAddress 配置 NAT 网关。 

New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>

若要配置网关,你将需要一些有关你的网络的信息:

  • IPAddress - NAT 网关 IP 指定要用作 NAT 网关 IP 的 IPv4 或 IPv6 地址。
    常规形式将为 a.b.c.1(例如 172.16.0.1)。 尽管最后一个位置不一定必须是.1,但通常是(基于前缀长度)

    通用网关 IP 为 192.168.0.1

  • PrefixLength -- NAT 子网前缀长度定义的 NAT 本地子网大小(子网掩码)。 子网前缀长度将介于 0 到 32 之间的一个整数值。

    0 将映射整个 Internet,32 则只允许一个映射的 IP。 常用值范围从 24 到 12,具体要取决于多少 IP 需要附加到 NAT。

    常用 PrefixLength 为 24 -- 这是子网掩码 255.255.255.0

  • InterfaceIndex -- ifIndex 是你在上一步中确定的虚拟交换机的接口索引。

运行以下内容来创建 NAT 网关:

New-NetIPAddress -IPAddress 10.254.0.2 -PrefixLength 24 -InterfaceIndex 79

这时查看server配置ipv4时 就会有了ip地址

使用 New-NetNat 配置 NAT 网络。

下面是常规命令:

PowerShell复制

New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>

若要配置网关,你将需要提供一些有关网络和 NAT 网关的信息:

  • Name - NATOutsideName 描述 NAT 网络的名称。 将使用此参数删除 NAT 网络。

  • InternalIPInterfaceAddressPrefix - NAT 子网前缀同时描述上述 NAT 网关 IP 前缀和上述 NAT 子网前缀长度。

常规形式将为 a.b.c.0/NAT 子网前缀长度

综上所述,对于本示例,我们将使用 192.168.0.0/24

对于我们的示例,运行以下命令以设置 NAT 网络

New-NetNat  -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 10.254.0.0/24

 

 当再次执行下面命令时

New-NetNat  -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 10.254.0.0/24

会报错,因为已经生成了

 使用NetNat可以查看已经建立好的 NAT 网络

使用Remove-NetNat可以清空Nat网络

 

 这样,客户端所有上网的访问都是经过了10.10.10.11来上网了。

如果有些网站不想经过10.10.10.11来使用可以改进

[Interface]
PrivateKey = 4Gp4c+SNuZ2HAfD2qQ4JxyTF+OhW+WqE0A/mKLUZa3Y=
Address = 10.254.0.2/32

[Peer]
PublicKey = wpCeLCeoTsV9Q3VG7vJnklNxf3qAt53S0vyMPSVaGwA=
AllowedIPs = 0.0.0.0/0
Endpoint = 10.10.10.11:55555
PersistentKeepalive = 25
 

注意替换PublicKey为计算机A的公钥,Endpoint为计算机A的IP地址,PersistentKeepalive为保持连接的时间,单位为秒。

AllowedIPs设置为0.0.0.0/0的含义为路由此计算机的所有流量至私有网络。

PersistentKeepalive该参数可不设置,但设置了该参数,则客户端会在每次连接后发送心跳包,保持连接。

LINUX 版本

服务端:

  1. apt update
  2. apt install wireguard
  3. apt install resolvconf
  4. 验证是否安装成功:
    modprobe wireguard && lsmod | grep wireguard
    

  5. cd /etc/wireguard/
  6. 生成服务端和客户端的公钥私钥
    # 服务端私钥
    wg genkey > server_privatekey
    # 服务端公钥
    wg pubkey < server_privatekey > server_publickey
    # 其他客户端私钥
    wg genkey > client_privatekey
    wg pubkey < client_privatekey > client_publickey
    ls -l

    spublickey 是服务端的公钥 sprivatekey是服务端的私钥, cpublickey 是客户端的公钥 cprivatekey是客户端的私钥

  7. 打开防火墙转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

        8.生成服务端配置文件

echo "[Interface]
PrivateKey = $(cat server_privatekey)
Address = 10.254.0.1/24 
#如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称,可用ens33或者用ip a 命令进行查看
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
#端口号55555是随意的,但是要在防火墙上打开
ListenPort = 55555
DNS = 114.114.114.114
MTU = 1420
#[Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号
[Peer]
PublicKey = $(cat client_publickey)
AllowedIPs = 10.254.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf

 

 由于我的linux服务器没有eth0,相关的设定要改为如下

echo "[Interface]
PrivateKey = $(cat server_privatekey)
Address = 10.254.0.1/24 
#如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称,可用ens33或者用ip a 命令进行查看
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o enp4s0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o enp4s0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
#端口号55555是随意的,但是要在防火墙上打开
ListenPort = 55555
DNS = 114.114.114.114
MTU = 1420
#[Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号
[Peer]
PublicKey = $(cat client_publickey)
AllowedIPs = 10.254.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf

 9,生成客户端配置文件

echo "[Interface]
PrivateKey = $(cat client_privatekey)
Address = 10.254.0.2/24
DNS = 114.114.114.114
MTU = 1420
[Peer]
PublicKey = $(cat server_publickey)
# 服务器地址和端口,下面的 10.10.10.136 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = 10.10.10.136:55555
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf

10,启动Wireguard

wg-quick up wg0

11,停止Wireguard 

wg-quick down wg0

 12,查看Wireguard状态

wg

 13,如果是云服务器,安全规则记得增加对应端口55555

14,配置多用户

#重新生成一对客户端密匙
#cprivatekey1 为客户端私匙,cpublickey1 为客户端公匙

wg genkey | tee client_privatekey1 | wg pubkey > client_publickey1
wg genkey | tee client_privatekey2 | wg pubkey > client_publickey2

#服务器上执行添加客户端配置代码(新增一个 [peer]):
#$(cat cpublickey1) 这个是客户端公匙,10.254.0.3/32 这个是客户端内网IP地址,按序递增最后一位(.3),不要重复

wg set wg0 peer $(cat client_publickey) allowed-ips 10.254.0.2/32
wg-quick save wg0
wg set wg0 peer $(cat client_publickey1) allowed-ips 10.254.0.3/32
wg-quick save wg0
wg set wg0 peer $(cat client_publickey2) allowed-ips 10.254.0.4/32
wg-quick save wg0

 查看设定的结果 

wg showconf wg0

 

#生成客户端配置文件1

echo "[Interface]
PrivateKey = $(cat client_privatekey1)
Address = 10.254.0.3/24
DNS = 114.114.114.114
MTU = 1420
[Peer]
PublicKey = $(cat server_publickey)
# 服务器地址和端口,下面的 10.10.10.136 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = 10.10.10.136:55555
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client1.conf
echo "[Interface]
PrivateKey = $(cat client_privatekey2)
Address = 10.254.0.4/24
DNS = 114.114.114.114
MTU = 1420
[Peer]
PublicKey = $(cat server_publickey)
# 服务器地址和端口,下面的 10.10.10.136 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = 10.10.10.136:55555
AllowedIPs = 0.0.0.0/0, ::0/0
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client2.conf

将client.conf进行二维码发布,linux下

apt install qrencode

cat client.conf |qrencode -t UTF8

用手机版本的wireguard直接扫码就可以加入了 

 

 

AllowedIPs地址后边加个0.0.0.0/0 /8(16,24,32)是什么意思?

是掩码的位数   
    A类IP地址的默认子网掩码为255.0.0.0(由于255相当于二进制的8位1,所以也缩写成“/8”,表示网络号占了8位);
    B类的为255.255.0.0(/16);
    C类的为255.255.255.0(/24)
    /30就是255.255.255.252
    /32就是255.255.255.255

0.0.0.0/0就是全部流量都转发

 查看

配置后需要重启服务

wg-quick down wg0
wg-quick up wg0


设置开机启动

systemctl enable wg-quick@wg0


取消开机启动

systemctl disable wg-quick@wg0

另外如果ubuntu想当客户端配置如下 

[Interface]
PrivateKey = yP8FOt6/nnnNALkDoGPJK8IUP0rOK2PVzHankNb6H1Q=
Address = 10.254.0.4/24
DNS = 114.114.114.114
MTU = 1420

[Peer]
PublicKey = NJDZsvc7wCnXNpZ+3ofzMK1S7UPfPXId/OJauKCzbnk=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 10.10.10.136:55555
PersistentKeepalive = 25

 当运行上面的配置时,ubuntu里的firefox就会走10.10.10.136的流量,但是wget,curl,nc等还是走的内本地Ip.这时增加主机路由表。

运行route 

 发现10.10.10.0直接就到了ens33了,这里就要改动一下

 #删除一条路由 删除的时候不用写网关

route del -net 10.10.10.0 -netmask 255.255.255.0

 运行 ip a,获取 ens33 

Wireguard Client添加主机路由表(10.10.10.136根据你的实际公网来添加)

route add 10.10.10.136 dev ens33

这时查看路由表如下  


通过下面的策略来控制对应的地址是走哪个网

route add 10.10.10.136 dev ens33
route add 10.10.10.123 dev wg0


linux配置wirguard原文链接:https://blog.csdn.net/weixin_43805459/article/details/120163031

另外在腾讯云上使用上面的方法配制时有问题,因为腾讯云的服务器上的eth0对应的IP没有对应真实IP存在问题

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐