另辟蹊径,在OpenVZ平台上安装WireGuard-Go实现搭建WireGuard服务端

另辟蹊径,在OpenVZ平台上安装WireGuard-Go实现搭建WireGuard服务端,第1张

另辟蹊径,在OpenVZ平台上安装WireGuard-Go实现搭建WireGuard服务端

在墙头越来越高的时代,想要找到一个稳住墙头的V#P#N越来越难了。

先是Open#V#P#N的陨落,然后是AnyConnect的慢慢认证。

纯V#P#N类的工具越来越少,但是很多时候预计Socks协议的代理远远不能满足我们的需求。

有人可能会说,那就用WireGuard吧。

是的,WireGuard确实是一个完美的解决方案,但是WireGuard只能安装在KVM/Xen/physical架构上,而不能安装在一些基于OpenVZ的服务器上。

真的没办法了吗?

其实WireGuard官方还提供了一个额外的解决方案,那就是WireGuard-Go

1.什么是WireGuard-Go

WireGuard-Go是WireGuard的Go语言实现。

在WireGuard的原始版本中,是用C/C++语言编写的,需要将完成的WireGuard模块(WireGuard.ko)编译到系统内核中,这样基于OpenVZ的共享核心虚拟化架构根本无法成功安装WireGuard。

在WireGuard-Go中,由于已经用Go语言实现了WireGuard模块,所以不需要将模块编译到内核中,但与原来的WireGuard相比,执行效率可能会略有下降。但这已经是OpenVZ极端环境下的唯一选择了。(谁让V#P#N没有别的选择了?)(转义)

2.安装WireGuard-Go 2.1前提条件

首先,在安装WireGuard-Go之前,我们先来看看安装WireGuard-Go的一些要求。

编译环境:

任何虚拟化架构或物理机架构
内存>:512MB(建议>:1GB,如果内存不足,建议通过增加Swap来临时扩展内存)
可用磁盘空between>:GB
安装Golang环境(下面将详细描述安装和编译过程)

*** 作环境:

OpenVZ虚拟化架构(Docker/LXC尚未测试)
内存>:128MB(推荐>:26mb)
可用磁盘空between>:500MB
打开TUN/TAP(您可以在VPS后台控制面板中检查并打开此项)

编译环境和运行环境可以是同一个服务器,也可以是不同的服务器。下面将详细描述如何导出编译结果。

必须注意的是,毕竟WireGuard是V#P#N,所以必须使用TUN/TAP。请确保打开TUN/TAP以防止WireGuard正常转发流量!

2.2准备编译环境

首先,我们登录编译环境服务器并安装Golang环境:

wget-O/tmp/golang.tar.gzhttps://dl.google.com/go/go1.12.4.linux-amd64.tar.gz tar-C/usr/local-xvzf/tmp/golang.tar.gz

然后配置与Golang相关的环境变量:

exportPATH=$PATH:/usr/local/go/bin 2.3编译WireGuard-Go

Golang安装完成后,开始下载WireGuard-Go源代码:

mkdir-p/tmp/gobuild/&&cd/tmp/gobuild/ gitclonehttps://git.zx2c4.com/wireguard-go cdwireguard-go

配置环境变量并开始编译(请确保您的网络状况良好,建议使用海外服务器进行编译):

exportGOPATH="/tmp/gobuild/" gobuild-v-o"wireguard-go"

如果没有错误,我们将在同一个目录中看到wireguard-go的可执行文件。

将此文件复制到系统目录(本机编译和本机安装):

cpwireguard-go/usr/sbin/wireguard-go

或者通过SSH、FTP等传输到目标运行环境服务器。,并将文件导入到上述位置并配置可执行权限(不同机器编译安装)。

如果不能自己编译安装,可以用Blogger提供的成品编译二进制文件:

https://download.ilemonrain.com/WireGuard-Go/precompile/wireguard-go.gz 2.4安装并配置WireGuard

这里很多人会问,我们不是装了WireGuard-Go吗?为什么要再次安装WireGuard?

别急,我在这里解释。

上一步安装的WireGuard-Go只编译WireGuard的内核部分(WireGuard.ko)。我们还需要编译WireGuard的主程序(wg和wg-quick),这样WireGuard才能正常使用。同时,我们也可以像正常配置WireGuard一样配置WireGuard-Go。

首先,安装必要的编译环境组件:

对于Debian/Ubuntu:

apt-getinstalllibmnl-devlibelf-devbuild-essentialpkg-config

适用于百分位数

yuminstalllibmnl-develelfutils-libelf-develpkg-config@development-tools

之后,下载源代码包:

mkdir-p/tmp/build/&&cd/tmp/build/ gitclonehttps://git.zx2c4.com/WireGuard cdwireguard-go/src/tools

编译WireGuard工具:

make&&makeinstall

此时,WireGuard的wg和wg-quick命令应该可以使用了。

有了上一步编译的WireGuard-go,我们就可以在OpenVZ平台上运行WireGuard了。

3.配置WireGuard-Go

首先执行WireGuard-Go,启动WireGuard内核,创建一个虚拟网卡(现在可能不会显示,但是当你开始使用wg或者wg-quick命令行时会自动出现):

因为是测试版,这样的警告会自动d出:

警告警告警告警告警告警告警告
WG
W您正在Linux内核上运行这个软件,G
W这可能是不必要的,也是愚蠢的。这个G
W是因为Linux内核内置了对WireGuard的第一个G
W类支持,这种支持比这个较慢的userspaceG
W实现要精细得多。关于G
W安装内核模块的更多信息,请访问:G
Whttps://www.wireguard.com/installG
WG
W如果您还想使用这个程序,针对G
W这里的建议,请先导出这个G
W环境变量:G
WWG_I_prefere_BUGGY_W

执行以下命令继续使用:

exportWG_I_PREFER_BUGGY_USERSPACE_TO_POLISHED_KMOD=1

然后执行命令创建虚拟网卡:

wireguard-gowg 下述部分你可以参照doubi的WireGuard教程 *** 作!
传送门:https://doubibackup.com/qbc20cn3.html

接下来,我们创建WireGuard的配置文件:

mkdir-p/etc/wireguard/&&cd/etc/wireguard/

生成密钥对:

wggenkey|teesprivatekey|wgpubkey>spublickey wggenkey|teecprivatekey|wgpubkey>cpublickey

确认您的外部网卡(对于OpenVZ虚拟化架构,通常是venet0)

root@ovzhost:~#ip地址
1:lo:<;LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueue状态未知

link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet6::1/128scopehost valid_lftforeverpreferred_lftforever

2:venet0:<;BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP>mtu1500qdiscnoqueue状态未知

link/void inet127.0.0.2/32scopehostvenet0 inetX.X.X.X/32brdX.X.X.Xscopeglobalvenet0:0

3:WG:<;POINTOPOINT,MULTICAST,NOARP>MTU1420qdiscnoopstateDOWNqlen500
link/none

生成WireGuard服务器配置文件wg0.conf:

echo"[Interface] PrivateKey=$(catsprivatekey) Address=10.0.0.1/24 PostUp=iptables-AFORWARD-iwg0-jACCEPT;iptables-AFORWARD-owg0-jACCEPT;iptables-tnat-APOSTROUTING-ovenet0-jMASQUERADE PostDown=iptables-DFORWARD-iwg0-jACCEPT;iptables-DFORWARD-owg0-jACCEPT;iptables-tnat-DPOSTROUTING-ovenet0-jMASQUERADE ListenPort=6666 MTU=1420 [Peer] PublicKey=$(catcpublickey) AllowedIPs=10.0.0.2/32"|sed'/^#/d;/^\s*$/d'>wg0.conf

生成WireGuard客户端文件client.conf:

echo"[Interface] PrivateKey=$(catcprivatekey) Address=10.0.0.2/24 DNS=8.8.8.8 MTU=1420 [Peer] PublicKey=$(catspublickey) Endpoint=$(curl-swhatismyip.akamai.com):6666 AllowedIPs=0.0.0.0/0,::0/0 PersistentKeepalive=30"|sed'/^#/d;/^\s*$/d'>client.conf

当然,别忘了打开转发:

echo1>/proc/sys/net/ipv4/ip_forward echo"net.ipv4.ip_forward=1">>/etc/sysctl.conf sysctl-p

确认配置正确后,启动WireGuard服务器:

wg-quickupwg0

您将得到类似这样的结果:
root@ovzhost:/etc/wireguard#WG-quickupWG0

[#]iplink添加wg0型wireguard
RTNETLINK回答:不支持 *** 作
[!]缺少WireGuard内核模块。退回到缓慢的用户空间实现。
[#]wireguard-gowg0
警告警告警告警告警告警告警告
WG
W您在Linux内核上运行这个软件,G
W这可能是不必要的,也是愚蠢的。这个G
W是因为Linux内核内置了对WireGuard的第一个G
W类支持,这种支持比这个较慢的userspaceG
W实现要精细得多。更多关于G
W安装内核模块的信息请访问:G
Whttps://www.wireguard.com/installG
WG
警告警告警告警告警告警告
INFO:(wg0)2019/04/1909:45:50启动wireguard-go版本0.0.20190409-9-GD02440iptables-AFORWARD-owg0-jACCEPT;iptables-tNAT-Apostrouting-ovenet0-j假面舞会

那么说明WireGuard启动成功(错误是正常的,因为基于内核模块的WireGuard无法加载,所以只能加载WireGuard-Go作为回退方案)。

将client.conf发回到本地导入到客户端(我推荐使用TunSafe,自己找下载地址),就可以完成配置了。

4.一点点善后工作…

要配置WireGuard启动:

systemctlenablewg-quick@wg0

清理编译过程中生成的垃圾文件:

rm-rf/tmp/gobuild/ rm-rf/tmp/build/ rm-f/tmp/golang.tar.gz

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/744473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-29
下一篇 2022-04-29

发表评论

登录后才能评论

评论列表(0条)

保存