本脚本适用环境4 g7 h0 h' S/ J* f5 W5 Y/ P6 d
系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+; K7 X" }* N4 W
内存要求:≥256M
. J3 q7 H: K c: P2 y日期 :2020 年 4 月 2 日# n: i1 R7 ^- C, _& ?! k) v9 q5 I
+ D; o% Q( q; a1 K
关于本脚本
: F+ j m& M0 Y9 H& P9 j* }8 |5 e1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
' E l& X+ Y. V: t& `% f2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;! G) @6 T5 P" `4 f% M. z
3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
7 X. d) z) z+ k4. 脚本会从 1024 到 20480 随机生成监听端口;
8 R! o6 t O8 T# z5 G% |# u9 H5. 脚本支持新增,删除,列出客户端功能;
9 ]* y/ F* y% d- n# W4 ^5 c: c6. 脚本支持查看已安装的 WireGuard 的版本号;* s5 e3 m% e Q3 Z/ h# H0 `
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;
! g: q( z8 i2 ]) v5 L) u5 e
; f: s9 g! K. `0 B$ R: }. A* y客户端下载
8 B" T3 F+ N# y" p, t% a; ?1 h* iWindows, macOS, Android, iOS 客户端: u4 l5 r$ S9 B: _5 F, w
https://www.wireguard.com/install/6 E! {" M! S9 r( r
' U; h4 ^1 G: M. l4 _
脚本使用方法
8 Y9 @5 N& w5 }1 {% g使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:" f5 C4 Q5 S2 h: Z1 \' K( j
4 B: S2 n, \) f3 o9 }% qwget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
8 e4 W$ v& y& i: E$ B6 Xchmod 755 /opt/wireguard.sh
" A7 D1 W( e9 E写在前面' W& w3 i( ?, n. |- q( ]* l0 {! S
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。
! I) X3 _% t* W$ @它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。: h7 N9 K( h: S, `' m: k5 o Q" D
RedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。5 q ~, Y- z2 r3 [
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。 c- Y% D) ~, ?6 P; ]
如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。) |! [4 D6 N: h5 Q- A" C8 a
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。# g6 h( Z) c! P3 Z, l
因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。
' \1 x6 ^( }8 K, T7 y7 p# ~! U% P: `3 b: }3 x( R5 e
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。
# z" r5 N6 ^3 R6 d# k* u就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。
! w* ^8 `8 Y2 @( |一键安装最新内核并开启 BBR 脚本' Z: @, Y& y$ k1 K2 Z
此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
' [( c- Y/ c0 y1 M9 T `) A4 g s3 G. C2 M/ ]2 ]* D
yum -y install kernel-ml-headers
" N; b/ N( X! v% R然后再重启之。运行如下命令:# f. y$ M" w( b0 J2 E d* M- h
/ l0 h6 O2 U# G: yreboot# y; v% L/ |/ {7 U% }
重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。 }( |* }8 M6 }8 B, N6 B
注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。/ I5 v5 M* b8 x2 Q
1 _- T% ^6 k/ n J b- e s8 G+ B+ J更新日志# J, `+ t4 |- Q7 `) w6 Z7 Y, g
2020 年 4 月 2 日:4 T+ [# z' }) T1 N9 C
Linux 内核 5.6 正式发布了,内置了 wireguard module。- g6 n1 r& l9 w
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。( H4 e9 @8 w4 e1 G
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
& o3 u$ G; ]( E; X
( u( z8 Y# l' n1 N2020 年 1 月 6 日:
/ b3 x" z; i$ I3 m' ?! u一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。
- U. y. D- \" I# ~于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。; M( G+ X' M9 Z0 `& C9 l( Q
并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。/ u: _ ^$ `$ e1 T' [: |
此次更新就是修复了以上问题。
& B. i5 h9 w; I6 B2 k$ h! K. h/ j Y: Q# H+ G! H: k" Y
2019 年 11 月 16 日:- V6 M3 E" k$ h7 {2 v2 w$ d
1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。
# L1 H9 I# v: u0 {. U) |3 v& j @2、新增 Windows 客户端配置示例说明。
/ J# J0 X4 \) S) f5 W
$ M1 ?2 \* ~) L3 Q# [; ?1 h- a7 T/ E2019 年 10 月 27 日:
) n; n2 I; |% F4 b) H1 ~4 d1、新增卸载函数,使用方法请参考下面的卸载方法。
+ r! w1 z2 {4 d# p2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。* p7 v ~$ o# ]: N; n, Z) l+ |
: E0 v5 `7 @% E7 i: ?从代码编译安装 WireGuard9 q3 G; k% G" H' P
/opt/wireguard.sh -s
% F8 A) N) r$ ^: B: a' ^7 a7 u从 repository 直接安装 WireGuard
; n5 Z2 y( n( K) t, k/opt/wireguard.sh -r: a& S0 O" O* F3 A. I8 m6 i3 l1 i
安装完成后,脚本提示如下4 B# ^2 ^; B/ F
WireGuard VPN Server installation completed
/ a# n |+ j" e! Q6 {WireGuard VPN default client file is below:& }1 @3 {5 R1 e! Z/ p7 e
/etc/wireguard/wg0_client
8 b9 I6 L' [% v# E6 nWireGuard VPN default client QR Code is below:* Q8 r% G$ R! K" N6 l
/etc/wireguard/wg0_client.png! ]2 x* `0 r4 k* k* R
Download and scan this QR Code with your phone* |" Z' u; f; i; _5 Z: F
Welcome to visit: https://teddysun.com/554.html1 T+ D5 |; N3 |3 U
Enjoy it
6 [/ i) m' s5 q0 v) \5 v1 ~卸载方法
: ?4 i$ n. f$ I) Y( X2 D! Q p0 \0 G/opt/wireguard.sh -n
+ w9 W/ l5 e$ U/ K( T W; p9 v其他使用选项
' Q3 x5 i2 l8 B8 P# }7 }查看已安装 WireGuard 版本号) }7 B0 O; a3 S
2 N& k: Q8 E" V1 g3 E/ G
/opt/wireguard.sh -v8 d5 I: v5 i( ^; p, i6 o" e2 q; D
编译升级 WireGuard 到当前最新版本
! ^5 A+ O) N% _( U5 j' l& g+ {* k- z. w
/opt/wireguard.sh -u# L/ i2 U! h! b! {9 g6 r# m! e
新增 WireGuard 客户端配置1 n0 M7 s2 H' t4 }0 _
; _5 y3 o2 a1 B. ~' d7 z
/opt/wireguard.sh -a% M' X: o5 v1 O i' y
删除 WireGuard 客户端配置
" C& @, G L# _5 a' Q" I D注意:默认客户端 wg0 不允许删除
- H5 V( {6 E( n8 w+ z: z1 t) _- C% N7 n' U0 f" @5 C6 p: I
/opt/wireguard.sh -d5 `2 d) {/ |* B8 J7 g5 F% @) I! c" U
列出 WireGuard 客户端配置; H; v9 P5 D% [! {4 F
5 ?- J, Z7 j6 _
/opt/wireguard.sh -l
' z7 e- h8 m( u# o0 Q: v高级用法8 \' K# U2 d- G8 O4 p3 T/ |
如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。! M: L( f' \: x' p4 B7 G* D G8 I2 [
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:
. U& H) @* P z) o. u! N U: r! S2 _6 k7 b9 z( D# e
export VPN_SERVER_WG_PORT=1234
; y; ], i1 |0 H1 q' g下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。6 Y* q/ P* S1 s5 z2 |+ i
VPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。
5 E0 t0 u: M2 v* {VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。0 O; N F7 ^0 G( ^7 H
VPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。
0 G# M) d [: k3 C/ P pVPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。* [2 x% |! r' d1 o
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。 [9 V. P* L U* |' R m
VPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
' T- {( W$ r! r$ KVPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。
4 ~+ L: ^" J2 `( N; `VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。; _) A0 Y/ p1 a& U' J
VPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
& S& q& K2 z0 \+ D' n$ s: {, HVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。
, w5 I: m- F( S( H% o) B* WVPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。' S1 C4 H5 ?( o
1 e# U8 K0 N. a: a' b: d
Windows 客户端配置
$ b- o2 V9 ?& z下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…! Y* O9 g$ M/ o7 C+ T
WireGuard 一键安装脚本' d( k' B5 B) ^# f e |- ^" s
4 q0 y. ?+ z% }) z9 _此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。
9 ^+ L; }7 V$ J0 D) kWireGuard 一键安装脚本
; {3 s+ ^+ w& x9 T# Q2 a$ B& ^8 w9 b6 O0 S( U
WireGuard 一键安装脚本5 [; o- Y8 y, ~3 \* u
+ Y8 {. Y7 d+ m3 A8 z) P/ Q点击 Activate,就可以 VPN 连接了。+ D9 U" b9 @ ?% [9 Z& S1 x
WireGuard 一键安装脚本
0 y) t$ Q$ v& p/ D
$ E) Z5 o, ~" c参考链接
# @" {5 @+ e |( q: b: lhttps://www.wireguard.com
! |6 D9 a# g& S" G# m& @* Khttps://github.com/WireGuard/WireGuard( o s- v1 w6 ]" A# R. w" e
https://git.zx2c4.com/WireGuard
_* T8 y+ ]6 h( X! uhttps://golb.hplar.ch/2019/07/wireguard-windows.html |