freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

P2P不同内网主机通讯之利用虚拟局域网方式
2024-11-04 17:38:55
所属地 江苏省

最近刷到某作者被抓,我想深入学习一下点到点通讯,创个系列一步一步来

两台不同内网主机无法直接通信,有多种方式解决,这里采取利用个人vps建立一个虚拟专用网络

目的: 绕过 对称型NAT限制,使主机之间可以直接通信

辉皮恩(虚拟专用网络):通过在公共网络上建立加密通道,使两台主机仿佛处于同一局域网内

我们将使用 WireGuard来搭建 ,因为它性能高、配置简单。

1、在 VPS 上安装并配置 WireGuard 服务器。

2、在每台主机上安装并配置 WireGuard 客户端。

3、通过 虚拟局域网进行通信,使用虚拟 IP 地址。

服务端安装配置

下载wireguard

sudo apt install wireguard

查看/etc/wireguard目录下没有任何文件,这是正常的,因为还没有生成密钥和配置文件。

cd /etc/wireguard

生成服务器的私钥和公钥

先设置文件权限掩码,确保密钥文件的安全性

umask 077 
生成服务器的私钥和公钥root@VM-24-16-debian:/etc/wireguard# wg genkey | tee privatekey | wg > publickey
root@VM-24-16-debian:/etc/wireguard# ls -al
总用量 12
drwx------  2 root root 4096 11月  4 15:23 .
drwxr-xr-x 99 root root 4096 11月  4 15:18 ..
-rw-------  1 root root   45 11月  4 15:23 privatekey
-rw-------  1 root root    0 11月  4 15:23 publickey

权限为-rw-------

创建wireguard配置权限

nano /etc/wireguard/wg0.conf

也可以使用vi编辑

添加如下规则:

[Interface]
PrivateKey = <服务器私钥内容>
Address = 10.0.0.1/24
ListenPort = 51820
#<服务器私钥内容>:将 /etc/wireguard/privatekey 文件中的内容复制粘贴到这里
#Address:虚拟局域网 服务器的虚拟 IP 地址,您可以根据需要更改,但客户端需要对应配置
#ListenPort:WireGuard 监听的端口,默认是 51820,也可以更改为其他未被占用的端口。
# 防火墙规则和 IP 转发(可选,根据您的需求)
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w net.ipv4.ip_forward=0
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
#PostUp 和 PostDown:这些命令在接口启动和关闭时执行,用于配置防火墙规则和启用 IP 转发。#如果您的服务器没有安装 iptables 或使用其他防火墙,可以根据情况修改或删除这些行。

记得#<服务器私钥内容>:将 /etc/wireguard/privatekey 文件中的内容复制粘贴到这里

启动WireGuard服务

确保配置文件权限正确 600

chmod 600 /etc/wireguard/wg0.conf

启动WireGuard接口

wg-quick up wg0

验证wireguard接口状态

wg-quick up wg0

设置开机自启

systemctl enable [email protected]

这里,[email protected]是 WireGuard 软件包在安装时自动提供的一个 systemd 服务模板,用于管理 WireGuard 网络接口。[email protected]中的wg0会替换模板中的%i,对应于wg-quick@****0.service敏感词辉皮恩注解了。 其中%i是一个占位符,代表要管理的 WireGuard 接口名称。

具体内容通过以下命令查看了解[email protected]服务模板的内容。这里不再详细解释

cat /lib/systemd/system/wg-quick@.service

我这里执行的时候报错:

root@VM-24-16-debian:/etc/wireguard# systemctl enable [email protected]

Invalid unit name "[email protected]" was escaped as "\x5bemail\xc2\xa0protected\x5d" (maybe you should use systemd-escape?)

Failed to enable unit: Unit file \x5bemail\xc2\xa0protected\x5d.service does not exist.

是由于终端或命令行中,@符号后面的内容被误认为是电子邮件地址,导致命令被错误解析

可以使用单引号括起服务名称 , 防止特殊字符被误解析。

systemctl enable 'wg-quick@wg0'

windows客户端安装配置

官网下载

https://www.wireguard.com/install/

选择windows install 下载后执行安装

生成密钥对

由于 Windows 客户端没有内置的命令行工具来生成密钥,我们可以使用 WireGuard 提供的图形界面或使用命令行工具wg

需要管理员权限打开

cd "C:/Program Files\WireGuard"
wg genkey > client_privatekey
wg pubkey < client_privatekey > client_publickey

然后通过type查看

type client_privatekey
type client_publickey

配置客户端

新建一个空隧道

在新建窗口进行配置

[Interface]
PrivateKey = <客户端私钥>
Address = 10.0.0.2/32  # 第一个客户端使用10.0.0.2,第二个使用10.0.0.3
DNS = 8.8.8.8  # 可选
[Peer]
PublicKey = <服务器公钥>
PresharedKey = <预共享密钥,可选>
Endpoint = <VPS_IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

可以查看对应文件进行填入

PrivateKey:填写生成的客户端私钥。
Address:客户端的虚拟 IP 地址,每个客户端应使用不同的 IP。
PublicKey:填写服务器的公钥(需要从服务器获取)。
Endpoint:服务器的公网 IP 地址和 WireGuard 监听的端口(通常为 51820)。
AllowedIPs:指定通过虚拟机局域网传输的 IP 范围,0.0.0.0/0 表示所有流量都通过虚拟局域网 。

在vps上添加客户端公钥

编辑/etc/wireguard/wg0.conf文件。

添加客户端信息

[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.0.0.2/32  # 对应客户端的虚拟 IP

注意:

  • 如果有多个客户端,重复进行添加,并且进行修改对应信息
  • [Interface][Peer]部分之间应有一个空行。
  • 注释行应单独占一行,或放在配置项的末尾,并使用空格分隔。

重启wireguard服务

systemctl restart 'wg-quick@wg0'

如果出错可以采用手动方式,先暂停清除后,重新启动

sudo wg-quick down wg0  #确保接口关闭
ip link show wg0				#验证接口是否关闭
sudo ip link delete wg0 #如果仍存在手动删除
sudo systemctl stop wg-quick@wg0	#停止wiredguid服务
sudo pkill -f wg-quick						#可能有残留进程,进行终止
sudo systemctl start wg-quick@wg0	#重新启动服务
sudo systemctl status wg-quick@wg0#检查服务状态
ip link show wg0									#验证接口是否正常创建

通过ping测试连接

ping 10.0.0.1

请注意:测试前确保防火墙规则添加

可以通过: 允许端口51820的 UDP 流量:

sudo ufw allow 51820/udp
或者:sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT

可能出现的问题: 服务器配置中,PostUpPostDown使用了eth0作为网卡名称。然而,您的服务器可能使用了不同的网卡名称,例如ens3eth1等。

可以使用ip addr 查看网卡名称

此时客户端和服务端连接便已经成功

重复上述步骤配置第二个客户端

第二个客户端的Address应为10.0.0.3/24

在服务器的配置文件中添加第二个客户端的[Peer]AllowedIPs10.0.0.3/32

此时两台主机便仿佛处于同一局域网内

遇到问题

解决 debian10 git不到wireguard问题

使用的是 Debian 10(buster)或更早的版本,需要启用 backports 仓库来安装 WireGuard。

1. 编辑 sources.list 文件

使用您喜欢的文本编辑器(如 nano)打开/etc/apt/sources.list文件:

sudo nano /etc/apt/sources.list

2. 添加 backports 仓库

在文件末尾添加以下行:

deb http://deb.debian.org/debian buster-backports main

3. 保存并退出

  • Ctrl + O保存文件。
  • Enter确认文件名。
  • Ctrl + X退出编辑器。

4. 更新软件包列表

sudo apt update

5. 安装 WireGuard

sudo apt install wireguard -t buster-backports

参考链接:

组网神器WireGuard安装与配置教程(超详细)_wirguard-CSDN博客

WireGuard 教程:WireGuard 的工作原理 - 知乎

# 网络安全 # web安全 # 系统安全 # 内网渗透 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录