本脚本适用环境
5 M. J7 s, J: @) {, O系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+! z5 g% ]0 E$ K1 u1 l* c: Q- k
内存要求:≥256M6 O- f& }- H, G+ g$ h8 \
日期 :2020 年 4 月 2 日
) a; h s* O3 _
) ~7 _5 f/ J& y W8 t3 B关于本脚本( @2 _; n3 t2 r1 F" X
1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
% p _+ b9 S- ]! L$ X, _) W6 k; l4 a. \2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;
/ w3 c9 T' q; Y; `9 Y0 _3 Z# f3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;5 q0 t' R! X6 D: m
4. 脚本会从 1024 到 20480 随机生成监听端口;( @0 Z/ O3 E' ~! J2 r3 `
5. 脚本支持新增,删除,列出客户端功能;
6 L: k" P$ ^, a: T0 g; e6. 脚本支持查看已安装的 WireGuard 的版本号;1 x: X& s' f2 S' Y. N
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;
8 m9 e W; z0 A3 p+ y% |/ y$ N% p9 \# G0 V. R& {
客户端下载
2 {0 G' ^5 _! B/ x8 Y' VWindows, macOS, Android, iOS 客户端" I# o3 b: R4 F
https://www.wireguard.com/install/
( h$ }) N0 i% K+ h1 u1 C
/ {9 D$ N9 R, y" b9 }脚本使用方法! B; D/ |1 H( r q, W( l9 F8 L
使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:
# u7 u& m8 h7 B' F& L4 t0 j, H' e- c+ V, u. z* s
wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
* d7 N2 A9 c2 G; j3 z: Q; [chmod 755 /opt/wireguard.sh0 P2 T: f& S* R8 J. A
写在前面6 m2 U4 q" y% n C
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。' t: d! V! N2 Y) [
它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。) T4 A9 G. A9 r: Z) K& @: B
RedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。+ j( {+ E& \9 @. k# R, c0 d* @
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。
c) G& V! Q' [3 d" j1 [6 F如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。6 V9 {* V) t& v8 u! f7 v+ J6 t
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。( r6 d) ]4 p8 g2 n
因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。; I7 _5 v" s+ u3 q9 S! }
) w, l: O8 [% J+ w1 D# c" c; x
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。
0 P) ` [7 S! [" {/ f' b. s就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。
/ J0 |1 \' C, `% y0 _( S一键安装最新内核并开启 BBR 脚本
! k5 P) t/ c9 m$ a此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:; L$ D5 p( K" ?" X, u, |* W
# s0 U3 Y2 j2 |( D+ P" y- Q
yum -y install kernel-ml-headers& G) x) v `9 I2 [( G
然后再重启之。运行如下命令:
' l( r6 ^: _" X& S$ X
5 E3 [. J, y- X @, Vreboot& L3 `5 ] _0 A6 t# F
重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。
( Z! {& r& i2 w2 O k注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。
2 L# i7 F1 p/ @% h3 |( \( r. s: v
: [ c& \5 a% M# x5 P/ ]$ ^* `更新日志4 `- F1 u/ i% ^. ^: F3 F9 o8 Z& ^
2020 年 4 月 2 日:9 y; n7 q, M/ V+ ~/ e* e& A4 f
Linux 内核 5.6 正式发布了,内置了 wireguard module。% F5 }7 \/ u' R( x* O
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。7 s. g" f% |; R$ V% o% S3 _
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
- K' E. D; s% [( l
6 \7 ]/ B+ {' k: E+ d- x- W' c6 m2020 年 1 月 6 日:
t. T6 k) d$ e+ `一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。; H B- p4 z$ D, @
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。+ T- E- V! x+ |
并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。, F; o( |, {6 A, }
此次更新就是修复了以上问题。
9 o( X8 Y6 d- t: o. }% S L
# D- B4 ^9 q& m2019 年 11 月 16 日:) e; D6 i( t+ x; p9 P! w
1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。( Y( c- C+ B, ~6 l# a
2、新增 Windows 客户端配置示例说明。5 R/ f. Y( z+ @- e' y
5 n* K+ N3 P) p, T5 g! A
2019 年 10 月 27 日:
+ `6 a. a# a" R' s7 p0 s7 `1、新增卸载函数,使用方法请参考下面的卸载方法。
+ P$ R, S: Y8 Q! t2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
9 H9 ^+ g+ g0 N- h
0 x' U; H/ B& j4 ~: F$ s4 ]7 |3 K1 Z从代码编译安装 WireGuard: z. R! `' K/ [8 I6 h; c8 f! _) ~
/opt/wireguard.sh -s
3 b0 w" H8 p& [" y$ V2 R从 repository 直接安装 WireGuard
6 X. t0 p/ L+ r2 o/ R/opt/wireguard.sh -r, ]! Q& {8 r3 j
安装完成后,脚本提示如下
9 g7 s7 k( p, dWireGuard VPN Server installation completed
( S I! M2 K4 NWireGuard VPN default client file is below:: Y5 Q: v: L8 V7 l5 f2 x' p% ^
/etc/wireguard/wg0_client
: b- f* Q5 V! O& Z" q& {WireGuard VPN default client QR Code is below:6 K( k4 k0 k+ j1 M5 `
/etc/wireguard/wg0_client.png
7 R9 n$ w0 K4 H; |Download and scan this QR Code with your phone
; U+ X6 W3 `8 dWelcome to visit: https://teddysun.com/554.html( b0 g4 m* i2 ?% Q# y4 G3 q2 L
Enjoy it
+ z* t8 s3 ^+ q1 i' B卸载方法/ c( F6 r3 e4 P/ e# D. m
/opt/wireguard.sh -n
% n% v, r7 o' q! }3 z其他使用选项
5 q* F7 Y2 w, B( N查看已安装 WireGuard 版本号 r1 f, y& }. W! j/ R) F
0 R: h# G0 K+ w/ f# p' b1 S- R: a
/opt/wireguard.sh -v* K: [. F. ` R+ l3 T2 @( e
编译升级 WireGuard 到当前最新版本6 g6 {3 I4 S# x; t& P
0 c, _, r% ~* V, L+ [0 N/opt/wireguard.sh -u
. o. n6 r; j) u+ ^新增 WireGuard 客户端配置! @" k \4 L4 D* l6 Z
4 A# j. J5 b/ K: y7 A% N g. |
/opt/wireguard.sh -a
. t+ u0 u% E+ ^删除 WireGuard 客户端配置9 A) i9 A' [6 Z- }3 q# w2 F
注意:默认客户端 wg0 不允许删除
R0 X5 \' Q6 U1 b0 D
+ f% q: x3 A6 O/opt/wireguard.sh -d
. C; F. [" M9 _: I: {列出 WireGuard 客户端配置: [1 A; y+ J6 U9 c! W7 K. x
% t9 W* r4 P2 |, A( |! `/opt/wireguard.sh -l
& n/ P; z8 b/ x5 _高级用法
7 b& H. D- z# J# w如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。! ]" B! l5 |3 x+ g0 p- y
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:6 m3 c! I0 o% f6 |% g6 O' E, O
8 Y7 V( v0 j4 b) n8 _/ n
export VPN_SERVER_WG_PORT=1234) b/ h- d9 Q. ~1 `" n" j
下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
* h( ~' F9 O/ v2 ]/ AVPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。& x8 B4 g' R$ Q3 G4 E/ p6 V; x
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。
0 Y: B' u1 ]* C3 |& h* @VPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。 g# V9 y2 L) m N
VPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。. B. q% G7 ^9 j* q) l% n
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。5 U9 U. t, ~7 I# o
VPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
2 D% S* I8 U1 `" l2 @( _/ i8 h( EVPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。8 S, p1 S( o- e. U
VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。
5 u/ M/ \# u- W. K! C- h- qVPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
" g }( Q/ T4 c- h) aVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。' Z2 h# k4 T9 f8 R1 L/ a
VPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。
1 {' K5 k, I3 T! `- D [' J; ]) ]/ b! p( Z0 {
Windows 客户端配置+ f5 t) `2 F) q" N% u$ R" f, Y
下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…
! }, W7 v, k2 t# D1 jWireGuard 一键安装脚本9 i' I' w/ E3 W* e5 M' `
0 `% v8 B! P+ E. k
此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。- y$ t3 G6 P/ `, K
WireGuard 一键安装脚本, g- y. k/ d" H3 w& E8 E
0 V! B# A% _% @/ `& W0 }6 a4 ?, g: C* w
WireGuard 一键安装脚本2 y. q9 r3 V: x/ P
& F" M9 N6 q3 y2 m
点击 Activate,就可以 VPN 连接了。" E( R& G! w$ s0 v3 W% F# i+ L
WireGuard 一键安装脚本+ [" k4 b& z( f' l8 B. W# r0 F2 [7 H
# ~4 U% j) [0 ~2 l, r; Y
参考链接
" }# _1 k% K: x2 t5 d& ihttps://www.wireguard.com J; x2 r9 F' X5 n# @: j9 r: L
https://github.com/WireGuard/WireGuard5 [) l- l; q+ y5 {
https://git.zx2c4.com/WireGuard
5 |3 v* B+ @$ T- x2 ^1 Thttps://golb.hplar.ch/2019/07/wireguard-windows.html |