在墙头越来越高的时代,想要找到一个稳住墙头的V#P#N越来越难了。
先是Open#V#P#N的陨落,然后是AnyConnect的慢慢认证。
纯V#P#N类的工具越来越少,但是很多时候预计Socks协议的代理远远不能满足我们的需求。
有人可能会说,那就用WireGuard吧。
是的,WireGuard确实是一个完美的解决方案,但是WireGuard只能安装在KVM/Xen/physical架构上,而不能安装在一些基于OpenVZ的服务器上。
真的没办法了吗?
其实WireGuard官方还提供了一个额外的解决方案,那就是WireGuard-Go。
1.什么是WireGuard-GoWireGuard-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-GoGolang安装完成后,开始下载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状态未知
2:venet0:<;BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP>mtu1500qdiscnoqueue状态未知
link/void inet127.0.0.2/32scopehostvenet0 inetX.X.X.X/32brdX.X.X.Xscopeglobalvenet0:03: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欢迎分享,转载请注明来源:内存溢出
评论列表(0条)