编辑
2023-02-01
灌水
00
请注意,本文编写于 1000 天前,最后修改于 665 天前,其中某些信息可能已经过时。

目录

WireGuard简介
通过WireGuard实现内网穿透
直接安装
1.安装Wireguard
2.创建配置文件(/etc/wireguard/wg0.conf)
3.启动Wireguard
4.配置客户端
Docker安装
1.安装Docker
2.通过容器启动WireGuard
3.配置客户端
4.将各个客户端加入后,可通过局域网IP相互访问

img.jpg

WireGuard简介

WireGuard是一个易于配置,快速且安全的开源VPN协议,它利用了最新的加密技术。目的是提供一种更快,更简单,更精简的通用VPN,它可以轻松地在低端设备和高端服务器上部署。IPsec和OpenVPN等大多数其他解决方案是几十年前开发的。安全研究人员和内核开发人员Jason Donenfeld意识到它们速度慢且难以正确配置和管理。这让他创建了一个新的开源VPN协议和解决方案,它更加快速,安全,易于部署和管理。

WireGuard最初是为Linux开发的,但现在可用于Windows,macOS,BSD,iOS和Android,如今仍在活跃的开发中。除了可以跨平台之外,WireGuard的最大优点之一就是易于部署。配置和部署WireGuard就像配置和使用SSH一样容易。WireGuard的另一个好处是代码十分精简,调试更加容易。由于WireGuard运行在内核空间,因此可以高速提供安全的网络。

VPN的通用特性:

  • 安全性:保证两个私有网络间的数据可以在不安全的网络(如公网)上安全地传输

  • 真实性:访问者是合法的用户,访问者访问的是正确的网络

  • 高效性:开启 VPN 并不会让访问网络明显变慢,且建立隧道的速度要快

  • 隐秘性:第三方并不能轻易嗅探到网关的存在

  • 易用性:很容易配置,很容易开启和关闭

WireGuard的优点:

  • 简单易用:WireGuard可以像SSH一样易于配置和部署。VPN连接只需通过交换非常简单的公钥即可实现,就像交换SSH密钥一样,其余所有内容都由WireGuard透明地处理,无需管理连接,关注状态,管理守护程序或后台的内容。WireGuard提供了一个非常基本但功能强大的界面。

  • 加密健全:WireGuard 使用先进的密码学和安全可信结构。它做出了保守合理的选择,并经过密码学家的审查。

  • 最小攻击面:WireGuard在设计时考虑了易于实现和简单性。WireGuard代码十分精简,并且易于审计安全漏洞,与IPsec或OpenVPN等庞然大物相比,即使对于大型安全专家团队来说,审计庞大的代码也是一项艰巨的任务,WireGuard意味着可以由个人进行全面审查。

  • 高性能:极高速的加密原语和WireGuard存在于Linux内核中的事实相结合,意味着安全网络可以非常高速。它适用于智能手机等小型嵌入式设备和满载骨干路由器。


通过WireGuard实现内网穿透

通过Wireguard可以将公网上的主机连接起来,形成一个局域网。只需要有一台具有固定公网IP的服务器,就可以将其作为我们搭建的局域网的中心节点,让其他的主机(不论是否有公网IP,不论是否在NAT内),都通过这个中心节点和彼此相连。由此就构建了一个中心辐射型的局域网,实现了内网穿透等功能。


直接安装

1.安装Wireguard

bash
#安装Wireguard apt install wireguard resolvconf -y #开启IP地址转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf sysctl -p

2.创建配置文件(/etc/wireguard/wg0.conf)

可以通过wg genkeywg pubkey生成公钥和私钥

json
[Interface] Address = 10.0.1.1 #服务器局域网IP PrivateKey = 私钥 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 ListenPort = 51820 # 自定义UDP端口 DNS = 223.5.5.5, 114.114.114.114 MTU = 1420 [Peer1] PublicKey = 公钥 PresharedKey = 预共享密钥 AllowedIPs = 10.0.1.2/24 #客户端允许局域网IP [Peer2] PublicKey = 公钥 PresharedKey = 预共享密钥 AllowedIPs = 10.0.1.3/24 。。。

服务端防火墙需要打开51820端口允许UDP连接。


3.启动Wireguard

bash
#启动Wireguard,wg0为配置文件名 wg-quick up wg0 #关闭Wireguard wg-quick down wg0 #设置开机启动Wireguard systemctl enable wg-quick@wg0

4.配置客户端

可以在WireGuard处下载需要平台的客户端,每个客户端与WireGuard服务端连接需要单独配置预共享密钥与配置文件。

json
[Interface] PrivateKey = 私钥 Address = 10.0.1.2/24 DNS = 223.5.5.5, 114.114.114.114 [Peer] PublicKey = 公钥 PresharedKey = 预共享密钥 AllowedIPs = 10.0.1.0/24 #客户端允许局域网IP Endpoint = 服务器IP:端口 PersistentKeepalive = 25

Docker安装

1.安装Docker

可以参考Docker简介安装。


2.通过容器启动WireGuard

bash
docker run -d \ --name=wg-easy \ -e WG_HOST=服务器IP \ -e PASSWORD=密码 \ -e WG_DEFAULT_ADDRESS=服务器局域网IP \ -e WG_DEFAULT_DNS=114.114.114.114 \ -e WG_ALLOWED_IPS=客户端允许局域网IP \ -e WG_PERSISTENT_KEEPALIVE=25 \ -v ~/.wg-easy:/etc/wireguard \ -p 51820:51820/udp \ -p 51821:51821/tcp \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --sysctl="net.ipv4.ip_forward=1" \ --restart unless-stopped \ weejewel/wg-easy

服务端防火墙需要打开51820端口允许UDP连接,打开51821端口允许TCP连接。


3.配置客户端

打开http://服务端IP:51821,通过密码登录可以访问可视化WireGuard配置界面,客户端的配置进行和配置文件下载可以在网页上进行。可以在WireGuard处下载需要平台的客户端,配置可以参考上面直接安装的配置方式。

(p.s.使用docker配置较为简单,且有可视化界面,但是由于镜像制作的问题,wg-easy不太方便修改配置文件,可玩性会降低不少(如无法自定义客户端允许的IP段与NAT转发等),推荐除小白外的童鞋都使用直接安装的方式,否则会出现一些不符合预期的问题。。。)


4.将各个客户端加入后,可通过局域网IP相互访问


基于WireGuard实现内网穿透