自建虚拟机玩起wireguard


前言

关于wireguard多么受欢迎,这里就不多说了。
动手来实际操练一下,就更清楚了。


一、设备环境:

1、M1版本MAC PC,
(1)自带无线网卡能上互联网。
(2)外配置USB网卡。
(3)安装有ubuntu 20.04虚拟机A,A作为wireguard服务端。A的配置见上一篇《Ubuntu20.04作为路由器使用》
(4)安装有另一台虚拟机B,作为一个Peer,本主直接采用的kali。
Linux 5.15.0-kali3-arm64
2、windows2012 孤立服务器(延展为整个内部网络)
(1)安装有网卡,通过《Ubuntu20.04作为路由器使用》已经打通网络。
安装虚拟机C,作为一个Peer,本主直接采用的kali。Linux 5.10.0-kali9-amd64

二、需求:

Peer B和Peer C通过wireguard打通。
在这里插入图片描述
当前情况是Peer C和Peer B都能访问 A。
如上图中的红色地址,是为wireguard分配的虚拟地址。(这个地方非常重要)
模拟完之后的网络逻辑架构如下:
(1)A相当于具有互联网公网IP192.168.1.154的一台服务器,具有内网接口,并且与C的宿主机处于一个内网。
(2)B相当于具有互联网公网IP192.168.1.157的一台pc机。
(3)C相当于内网里面的又一层内网,nat到内网。

三、安装wireguard

1.A Ubuntu服务器

(1)安装
sudo apt install wireguard
在这里插入图片描述
(2)生成密钥对
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
两个文件将在/etc/wireguard目录中生成。
如果查看不了,就开启root账户:
sudo passwd root
切换到root用户吧。
本机产生的privatekey:iCtMYTjlLLc1NJ8WpdRyByjaREozilDbX9xBZIZKL2A=
本机产生的publickey: qA8BLx/OGOEuwOczwZzCWDrDdGm7QTydikYOLnxGhns=
(3)建立虚拟网卡,用于加密隧道
sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.253.0.1/32
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY(更换)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADE

ens160,是本服务器的“公网接口”

执行:sudo wg-quick up wg0
在这里插入图片描述
该wg0.conf和privatekey文件权限应受保护。chmod将权限设置为600:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
此时ifconfig一下,看到了wg0
在这里插入图片描述
要检查接口状态和配置:
sudo wg show wg0
在这里插入图片描述
还可以运行ip a show wg0以验证接口状态:
在这里插入图片描述
要在启动时启用WireGuard接口,请运行以下命令:
sudo systemctl enable wg-quick@wg0在这里插入图片描述
(4)服务器网络和防火墙配置
必须启用IP转发,NAT才能正常工作。打开/etc/sysctl.conf文件并添加或取消注释以下行:
sudo vim /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1
保存文件并应用更改:
sudo sysctl -p
net.ipv4.ip_forward = 1

使用UFW管理防火墙,需要在以下端口打开UDP通信51820:
sudo ufw allow 51820/udp

2.B Peer

同上的命令,生产private key 和public key
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Private key : SGZgzjAZ860YkA3mQUxF0hVu27iZK3tcz8yuo592CFA=
Public key:0MazdSsLHDbavo7RVgpFmo1UKAt+0X4RdE1ZNCR2nws=

同样vim /etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.253.0.2/32

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 192.168.1.154:51820
AllowedIPs = 0.0.0.0/0

执行:sudo wg-quick up wg0 启动。

3.C Peer

执行如上B的操作。
Private Key:8EIEj4vfmU3+MojyN0/JIOGXbJoJBLXRdYmylfQdZ28=
Public Key: yFxn5ve/2oYGRKZCpFZ4rBsW7fbAHB34O2hPyjjorkg=
设置wireguard的IP地址为10.253.0.3
4.将Peer方添加到服务器
将客户端的公钥和IP地址添加到服务器。
为此,在Ubuntu服务器上运行以下命令:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.X.X.X
本次实验先把B的信息加入到A中:
sudo wg set wg0 peer 0MazdSsLHDbavo7RVgpFmo1UKAt+0X4RdE1ZNCR2nws= allowed-ips 10.253.0.2
把C的信息加入到A中
sudo wg set wg0 peer yFxn5ve/2oYGRKZCpFZ4rBsW7fbAHB34O2hPyjjorkg= allowed-ips 10.253.0.3

当然也可以,把服务器的wireguard down掉之后,在wg0.conf中写入,其实上面的命令是会自己写入的。
[Interface]
Address = 10.253.0.1/32
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADE
ListenPort = 51820
PrivateKey = iCtMYTjlLLc1NJ8WpdRyByjaREozilDbX9xBZIZKL2A=

[Peer]
PublicKey = 0MazdSsLHDbavo7RVgpFmo1UKAt+0X4RdE1ZNCR2nws=
AllowedIPs = 10.253.0.2/32

[Peer]
PublicKey = yFxn5ve/2oYGRKZCpFZ4rBsW7fbAHB34O2hPyjjorkg=
AllowedIPs = 10.253.0.3/32

四、测试

1. Peer B与服务器A

Peer B相当于互联网的一个“公网IP”。
(1)先把Peer B的wireguard down掉
sudo wg-quick down wg0
(2)在Peer B上ping一下网络情况

Ping 192.168.5.5(Peer C宿主机内网地址) 和 192.168.5.100(服务器A的内网地址)是不通的。说明Peer B还没有到达内网。
(3)Peer B启动wireguard
可以ping通192.168.5.5 和 192.168.5.100。也可以说已经打通到内网了。
当然也可以ping通 服务器上wireguard的虚拟地址10.253.0.1(废话)。
但是还是ping不到Peer C。

2.服务器C与 PeerB和服务器

Peer C相当于在内网里,又叠加了一层NAT。
先把Peer C的wireguard down掉。但是因为他本来就在内网,所以C向外ping都可以通,当然也能ping通Peer B。
Peer C启动wireguard
Peer B和 Peer C通过虚拟地址(10.253.0.X)打通。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值