本脚本适用环境5 E8 D, Q+ Y& T% k, Z% z8 `* h0 o
系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29++ y6 w% v9 l& f- v% u# w' B
内存要求:≥256M
- \7 f& G4 J! K( |2 Y日期 :2020 年 4 月 2 日
; C' @( v6 `% c) @2 T1 k" ~. q, v) j1 _. H
关于本脚本
; f4 {! w' H$ @$ i! k) J' M& j; S1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
; M6 M$ O' w* ~6 v; J. U2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;6 X' s2 P9 L& W+ X/ y3 }7 T& @ d& w
3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置; E- m1 i3 V" j6 P" ?
4. 脚本会从 1024 到 20480 随机生成监听端口;
9 Z; c, P' I3 m# r, q8 S5 t5. 脚本支持新增,删除,列出客户端功能;
# Q6 M$ ~! p. e- ?6. 脚本支持查看已安装的 WireGuard 的版本号;* N* K6 g) r8 ^* a$ |' o+ L/ \- F. R( p
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;$ h/ C! ?& U8 z1 v& N5 G% J
/ I+ v' f1 `8 ^7 K9 P客户端下载
' t4 k. b2 P7 ]1 \1 P/ {) iWindows, macOS, Android, iOS 客户端
}. R# b2 k6 q2 i- |+ G. y& C1 x8 Ghttps://www.wireguard.com/install/4 k( P" j1 O7 E! N" P. S' H
" X+ F, ?, G- Q% o* d" ^
脚本使用方法
4 g7 E. ~9 ^0 w0 U使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:# }0 g4 m. p5 Q8 a: @: `1 W
" O4 R u- O2 J
wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
: N K8 L+ A0 B3 v0 m) D2 pchmod 755 /opt/wireguard.sh! R' X4 E/ Y$ [# l
写在前面
! h9 I* \, p4 u' r" o3 m( ZWireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。
- t2 b g$ |9 D# T/ y它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。
7 z8 x' x8 i) a! K' J- Z( NRedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。' b4 e' V4 A+ C
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。8 b6 V. i, T9 S: G" K) w
如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。" Y D$ G8 ^/ {# U: g
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。
) N8 i$ Q, I1 h7 p( | r9 f因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。- [7 h) [$ a% X) O, j. S+ u( S
5 z: `: y% f7 o1 J/ S1 R
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。/ c% O& x, x( s
就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。7 i7 M) b& O5 G3 c
一键安装最新内核并开启 BBR 脚本* Z6 L; Z( F+ X; ]* e
此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
+ R7 }! N' _2 \( N/ G- w/ G4 L6 y' y, C! G5 z
yum -y install kernel-ml-headers
7 U7 G# Y4 F" n U: y8 i3 b然后再重启之。运行如下命令:# ~- q G: n. i; P+ S, u
/ A- t1 ~3 C$ p, u, l
reboot; c$ E. Z0 Z' D; l' p! y
重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。
. V- p! j* v( R+ h注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。
4 u0 A: E# @& l) g2 ?, B: f5 x
) b* B* _: i! p. L( c更新日志. R) O$ a' ]7 x) C8 _, Z
2020 年 4 月 2 日:% ?, b1 d" _. ~0 B2 H7 t j
Linux 内核 5.6 正式发布了,内置了 wireguard module。
; r a5 \5 V1 G- D3 |& Z/ R本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。- e- Y! ?" c5 w1 g1 e
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
h' D/ L0 ?$ H/ F Z* |7 e6 l+ J; U& G3 h- N
2020 年 1 月 6 日:
6 O1 X0 M; T: l1 C# v一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。
3 a2 q1 _% T8 g+ }) d) D Y) \; d于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
9 e3 p$ W% f3 E6 p }2 I并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。
7 v$ T& z8 P* p6 o; a7 X此次更新就是修复了以上问题。. I) g5 @7 D1 ~$ u6 N3 y
2 p" e1 ]8 t- d3 s/ V2019 年 11 月 16 日:3 \ j4 Z, d" w W# q2 t W' o; S
1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。* [& {. i8 l! L! W$ u- Z9 E, H
2、新增 Windows 客户端配置示例说明。
3 L" c3 A/ O- V, r" P) b% _5 ?' Z# A& g, }+ [" j7 B
2019 年 10 月 27 日:. x) G8 x( l* N/ g8 ^, \/ V
1、新增卸载函数,使用方法请参考下面的卸载方法。
; R$ h1 q; h/ z2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
3 E# j) V$ ?% @+ _$ K
+ t* g% k- w! a% ~" O# q/ w从代码编译安装 WireGuard
. M8 g- u4 m2 R9 i2 I; `/opt/wireguard.sh -s
* G5 p9 Q: O! H* e从 repository 直接安装 WireGuard
" G7 b% ~: `/ ]% e6 g" m1 S. p/opt/wireguard.sh -r
3 s1 N- R, g% V1 |/ q8 {) L安装完成后,脚本提示如下
( S3 ?' ?! |" r/ P) T. JWireGuard VPN Server installation completed
9 T# T, J% D# |+ f+ h( `0 M" eWireGuard VPN default client file is below:
* y4 D `: J3 Y! y/etc/wireguard/wg0_client
) u) r1 H8 B/ @WireGuard VPN default client QR Code is below:
0 P: f( X4 J" M/ e: x/etc/wireguard/wg0_client.png4 d! k# \: e( l
Download and scan this QR Code with your phone1 ]1 U: m9 V; d( s% @5 }5 K
Welcome to visit: https://teddysun.com/554.html
! I {" {2 x$ N% Q S, |9 _Enjoy it0 G) J& E4 m, E! q
卸载方法
$ f" e" `( b1 b* o: M+ Z/opt/wireguard.sh -n8 A, R' r6 i) Z; o$ ~4 @
其他使用选项# |( v3 m* L5 A( V
查看已安装 WireGuard 版本号
' U. T6 v4 U u1 U1 C, H+ s" S% ]
/opt/wireguard.sh -v
( N$ @- \/ B+ y+ z3 E编译升级 WireGuard 到当前最新版本
% b2 u6 H- w9 i% t: q
. {7 J6 @' d' S8 Q: p2 T/ q/opt/wireguard.sh -u
; O. O: [5 o* o* ?9 ~: |) `+ Y新增 WireGuard 客户端配置
+ v! G8 c9 ~4 M5 |8 [: U5 U3 r5 c1 {" @! m& I2 J3 m
/opt/wireguard.sh -a( h: `! g5 L& P, L9 S
删除 WireGuard 客户端配置
6 x; \; C, K# ]! d( Y. b) R注意:默认客户端 wg0 不允许删除
) d- i0 P" w0 A( e$ s- E! `6 |% y0 p8 Y
/opt/wireguard.sh -d/ X* V; b! I0 s
列出 WireGuard 客户端配置
1 a9 X* B ^" n3 ~) h
2 p# J' V& G* e( i; U5 g/opt/wireguard.sh -l0 O8 m) b# b9 _) [, m6 k# ]
高级用法
5 S+ T ?. w: R1 r0 {如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。0 f {0 U; T+ P) |
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:
4 Q$ g6 F/ Y9 q) k6 Q: Q7 ]( t3 R; D! r$ a* ]
export VPN_SERVER_WG_PORT=1234
0 r1 @; D, c( t3 d% N- P3 V, R! [下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
$ ?: k' S* l* G3 K) JVPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。: o: p+ H2 @& K* J% h2 }
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。
: k. z* O& {% ?* c8 lVPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。
- G. ]* b+ `3 t' C4 \( y, s3 lVPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。9 E0 a$ y, V; b5 H C: u
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。! V) J8 q3 ?# g( F* D! \: w/ t
VPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
$ ]2 y/ B# y* n$ A3 D4 }VPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。5 N! p. s/ E' Y; U7 s. |" N4 s
VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。& U! f) _. P% N% g* V' [( I5 Z
VPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
5 s* ?( g' L$ ^( bVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。
7 A: Y' C, A3 t; z3 oVPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。- L) m3 _7 U$ M$ N* A1 V; V" l
6 F2 N5 K5 N8 z1 p
Windows 客户端配置
& G( n) ]. m4 r4 Z下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…3 l& l6 j( r( \9 f8 z. V
WireGuard 一键安装脚本
& F; o% M3 f, _4 D# E) E% |) M4 y5 p2 L8 K- ~5 C! t& J5 [
此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。
0 ]$ p& c B# ?. Q& W8 L8 wWireGuard 一键安装脚本* r0 K0 s8 W x2 d# E: D! {1 h
6 O) Q Y& {! C) T* h( _4 V
WireGuard 一键安装脚本
7 t, W; b" ?) f3 o1 J4 J0 B( W) m
: U4 p! x0 W9 N% }点击 Activate,就可以 VPN 连接了。
5 p; L# ~0 B1 f3 U: BWireGuard 一键安装脚本& \9 a% S/ k' a% y; l) t* G* R: c
( c( f# W7 F% _% d5 A
参考链接
: {! g/ T+ C* {9 qhttps://www.wireguard.com
1 P+ t; W g# vhttps://github.com/WireGuard/WireGuard* |2 V7 t: z3 |# F' }% Z
https://git.zx2c4.com/WireGuard
! J: D F v5 A" x) ohttps://golb.hplar.ch/2019/07/wireguard-windows.html |