本脚本适用环境
6 X9 K! m5 A2 i; A" N, e系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+7 g T4 x2 j; ]
内存要求:≥256M5 ]6 i% D4 n) q+ O- h8 Q
日期 :2020 年 4 月 2 日
2 n& i0 T6 X1 z: M8 L; i9 x7 G- r
1 b( z6 r9 W$ E! P8 M" w$ o q, S关于本脚本* q/ ^+ t8 t. m9 T, y) {
1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
1 v. }) s6 K* r# k7 F2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;
* W+ R* `; A: N8 G) N6 A3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
6 v& Z7 o9 s- j. b, l0 e4. 脚本会从 1024 到 20480 随机生成监听端口;4 n, ~6 K1 \" F+ G
5. 脚本支持新增,删除,列出客户端功能;
; v: K# R4 i; W, p, k* y6. 脚本支持查看已安装的 WireGuard 的版本号; Z' X' ^4 b! q8 `; X9 C
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;6 @6 m+ t! g# ?9 [7 H# y6 l
( w4 [9 e3 n2 l) G: }' l" A
客户端下载
8 V j2 [& d* u) z" {. MWindows, macOS, Android, iOS 客户端
$ J( y7 |4 Z1 Whttps://www.wireguard.com/install/" |$ w: b+ Z7 Y& G
$ M, K' u# j) f/ p& j4 p
脚本使用方法7 e M( |/ R" R
使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:
4 ~6 G. z1 L! p+ B% o3 J7 A8 H
) O6 z: D; @8 h: j6 t! @wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
( P2 p( e4 T, _6 ]. T! [0 V1 Kchmod 755 /opt/wireguard.sh% K2 z8 m( N; |8 ]
写在前面' H3 F- s1 K# A- ]
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。# [8 R- c) d* W6 O, }/ p
它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。
. u- a G% v* i2 vRedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。
' v0 Y/ ~: p6 { M2 @- T, h$ `/ T' rDebian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。
" j3 N! `/ ^( }$ S, L& Q. h如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。0 Q9 X9 K& K1 h2 B
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。
& i4 G4 {! z* o. E因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。% y7 G/ I# T- ?/ c6 C
: C; ^7 K0 B4 ?) d0 e
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。8 ]; b' H" S9 P% Q" q- u. _
就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。
. b- ], M6 z# |' y0 j一键安装最新内核并开启 BBR 脚本6 g( r: M3 Q% @6 H% Q, q$ x3 W r
此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
" I# d m% m! d0 V( z+ D" B3 Y! S2 |# ^- i6 X
yum -y install kernel-ml-headers2 {0 d6 |8 N0 l3 U3 ^
然后再重启之。运行如下命令:/ f) F: A* j |
1 q! v: H0 X2 ]$ A* P6 S
reboot
. |8 y$ a9 O' a2 s重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。
0 j1 h6 {3 l* ]5 z/ {2 [注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。
& l) d3 K- p8 }# b/ }7 c: |; n F- S) V! H3 w: l
更新日志( n) Y" B8 ]( j9 h1 S! a- Y3 X" x
2020 年 4 月 2 日:
1 W( M' G7 O. h0 z/ O6 O8 F3 \2 y# CLinux 内核 5.6 正式发布了,内置了 wireguard module。# S4 S/ ^( m9 P, Q0 z
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。
/ |5 w4 g0 w; ?* l+ N4 b. v当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
9 ]& h/ T! Q; o4 T! g2 m' E. I2 q. l) C5 l5 d* Z/ T
2020 年 1 月 6 日:3 Y1 h" }$ a& D+ A" B
一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。# j- q5 Z3 W$ c z- q
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
( F* ^/ b h; t& C; F; j" @并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。/ @. w7 V1 t9 A* v, _' k- N# P
此次更新就是修复了以上问题。% ^9 W9 U- Y2 ]
5 F2 T; K9 F* }0 B& [$ ^2019 年 11 月 16 日:
* [& o2 L% \% z9 h! [1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。
1 q$ {$ F5 Q! x7 C% \% s. o+ h2、新增 Windows 客户端配置示例说明。1 P; T# v/ S: r0 `' G8 J$ M0 X
4 r8 ]7 `& s" n+ j; T1 O( d5 e2 `. p2019 年 10 月 27 日:; @3 s) _6 w4 p% @3 S: |0 n; P
1、新增卸载函数,使用方法请参考下面的卸载方法。0 m# o4 d& W0 D9 T
2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。# g5 D3 O7 P6 u0 \, V- U7 m
; z a7 U: V, C2 J# J8 X' d
从代码编译安装 WireGuard3 ]4 V% h. R. s) {) R7 Z+ M) N
/opt/wireguard.sh -s
2 ]' L1 @- A5 m2 K3 D7 T; C8 o从 repository 直接安装 WireGuard& Z( @$ o9 W* m& U1 ~ N
/opt/wireguard.sh -r7 Y$ |/ ^3 J Q" \1 k2 P
安装完成后,脚本提示如下
9 ^2 x5 V7 d# ]& r! eWireGuard VPN Server installation completed
& ]0 P1 C9 w5 mWireGuard VPN default client file is below:# o X# N9 Y! D% Y% j; l* g3 E- `
/etc/wireguard/wg0_client
: ~! t. y; L2 I5 v- q) TWireGuard VPN default client QR Code is below:
6 r4 Z5 ?+ f7 `+ S3 U+ j1 v/etc/wireguard/wg0_client.png
6 n' e6 |! }0 n/ j0 Z8 DDownload and scan this QR Code with your phone
7 O% R) G$ d$ d3 O7 d! F: WWelcome to visit: https://teddysun.com/554.html
- Y* S u" f6 P$ F" vEnjoy it
7 {: c7 j) ^) |) Z* t卸载方法
W G& ] B9 {% a( O! i/ u5 Y/opt/wireguard.sh -n
2 O9 x( Q2 `& D# R其他使用选项, T* l) A, W$ E; P' l1 r
查看已安装 WireGuard 版本号
" X. X/ C! P- o& o
4 m0 D# L0 H3 `, |% i1 ~& O/opt/wireguard.sh -v
) ?$ [/ r% W: I编译升级 WireGuard 到当前最新版本6 i) O) X2 P+ |- V
" P9 O# O" N! Z- Q) u H
/opt/wireguard.sh -u5 l+ l: }% ] |1 J* J _6 H9 a5 T3 C
新增 WireGuard 客户端配置
1 `# @6 g* O, I. _! U7 Q3 c8 H8 m4 Y% I B; O7 j
/opt/wireguard.sh -a! c% h' @, U L* k8 F8 w6 C
删除 WireGuard 客户端配置% E) Y; Z" D+ w3 K. A* S: ?+ p
注意:默认客户端 wg0 不允许删除
0 {. J4 [ b7 n( s3 P" Z: k
$ Z0 T4 A. i, F* C, `/opt/wireguard.sh -d! \! F( c% b% [2 k/ R
列出 WireGuard 客户端配置! n) U9 J( s9 ]
/ l; C6 a, Q, e$ r
/opt/wireguard.sh -l8 T. n9 T0 V& x2 P% z
高级用法' E/ W1 h/ r$ D% S5 I
如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。% |7 @! a# I$ P- s$ N1 T
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:) z1 T4 @8 h' R& b" ^
# }0 k; R( I Y4 Y, ~9 p- @export VPN_SERVER_WG_PORT=1234; o! o2 w8 I' d8 T; F9 i( A
下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
E4 `% G6 \7 g$ w, z, xVPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。: r2 C, ^5 {. O# C: M- Q G
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。
! n3 P2 S; ~9 F! ^) Z0 t5 UVPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。" ~! F! n: E; |
VPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。
+ l& O- R) ~/ f9 \ t `0 c# ?$ V( aVPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。! t' J7 d6 x: }
VPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
% R( k$ T, R. P8 p5 nVPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。
6 X0 S" }* V0 x- D" J2 IVPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。7 u5 p3 d$ K$ Q. F9 [& _
VPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
! f6 w+ P8 S; K- Z8 U" {4 f/ t* y, FVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。
0 `4 {# m i6 ^9 Z6 pVPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。
! ?, C/ K' X$ h3 h0 s: Q
& `- s* S2 l: Y1 _7 yWindows 客户端配置
L/ t6 S6 V/ r1 \) w$ a" n9 _1 d- h下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…
8 i- s+ K# l3 K- T. M0 yWireGuard 一键安装脚本
. {9 a3 ^5 L: S5 M; C3 v- v( ]9 u1 g: Q* N! ]
此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。- M! s h$ i/ g4 s! r
WireGuard 一键安装脚本9 S3 C9 B& I. E4 k5 d( ~
: m5 `: a# N- m9 [5 K8 H8 a
WireGuard 一键安装脚本
4 b5 Y) g* A* h6 e K3 m4 L X4 t1 H! W4 I& D/ n
点击 Activate,就可以 VPN 连接了。
( A: ]7 o1 v7 }: e) KWireGuard 一键安装脚本
- l% X. O8 a. `3 O9 S
; ^$ }8 ^& p0 [0 K+ n" C) k参考链接% Q* w/ l) l' T! V& l( l- m; ]
https://www.wireguard.com
. S# |. a4 A* G$ z+ j P# i8 i: mhttps://github.com/WireGuard/WireGuard
|, W. r1 I; T# t* R( v w. u3 Chttps://git.zx2c4.com/WireGuard
7 ]6 H' B) Q# m' lhttps://golb.hplar.ch/2019/07/wireguard-windows.html |