本脚本适用环境% s- V2 x; J% o" z% e
系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+
7 S# R0 y% l' s6 R( J内存要求:≥256M ^# _4 t% u) l; Y/ O- S) s: V
日期 :2020 年 4 月 2 日6 G) J$ ~! v7 c) L8 o( z0 @
) F+ f" C- B3 e) N. A; b1 M关于本脚本( Y' \2 o* N q5 G9 n% f( M( ~) k l
1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
8 ?' [: }# t- i2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;
( w+ \! O/ G/ S& D8 J5 ~0 T1 e5 @3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
i0 n! c! i" s3 z, ?7 z4. 脚本会从 1024 到 20480 随机生成监听端口;
% v5 G& u: \* q5. 脚本支持新增,删除,列出客户端功能;2 h. ?5 d9 i% l7 t1 L0 T( L
6. 脚本支持查看已安装的 WireGuard 的版本号;
E9 n8 H5 h: v. Y+ d# w1 B7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;
4 }% c6 z+ n* i, k
) h; V6 y) \# L f; J客户端下载2 E% _ T; F. O6 x! `
Windows, macOS, Android, iOS 客户端
; N/ ~: w( `% ^6 u4 Phttps://www.wireguard.com/install/
/ b& V; _, o9 A. `$ F7 V
; `! k' S( j5 R k7 J脚本使用方法3 @" b* m: ?7 Z9 e4 G. k4 W
使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:
0 J' v$ G# c& q2 k! i/ \1 A
" F0 v; {' F2 a# S( H8 |wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh* F2 x& k4 g" b. M) x1 `. k+ T
chmod 755 /opt/wireguard.sh
! P8 i. z" q% I0 |8 K! T, s写在前面* z: {0 N1 e# _7 e& X' Z0 m
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。5 W9 z+ H2 y# ~5 r9 t) N
它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。$ ?& h8 B4 `6 L& y. Q2 e: @+ N
RedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。 h- w/ m. z+ K. S
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。# \/ d# a. G6 F$ C
如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。
7 w, b5 A2 D" ]! \* l& p$ ?' l而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。
; F3 W) H' {9 `因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。5 R' i d! t/ p! \0 W. X! @* W
) e$ M" f* @+ A# {我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。
5 P7 p2 J- O# M U: N/ W/ D' B就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。- I9 K0 t0 w3 _: s4 _% ?
一键安装最新内核并开启 BBR 脚本! q9 U. ]1 S* q$ C3 S. j
此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:" y+ M |' {, l% V- G
3 U$ I" I) U3 O' G4 M. a, y
yum -y install kernel-ml-headers
8 q' J: b/ e7 o/ D3 V然后再重启之。运行如下命令:! {; ?4 f" u! _5 P& n& E
) q5 J: \* f3 A1 b9 Z$ f8 C! jreboot% X( S e: m5 v, a3 U2 }8 \; \
重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。
7 H! v% s% b+ z9 f注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。) a9 V1 g$ N& j# G) K6 c$ U
, U- c ]# e+ m6 {4 c
更新日志3 O' t$ @& K, F. w, @5 v0 e
2020 年 4 月 2 日:
& V. ]1 p/ |; z4 x0 QLinux 内核 5.6 正式发布了,内置了 wireguard module。
- f1 M/ E8 G2 @$ |9 t- t$ i7 s本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。
6 Q6 q6 D6 W y; R0 V/ H当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
9 v. ?* p, J0 B
! A. g1 B% T9 w) I2020 年 1 月 6 日:
# m1 L- K9 ?- p5 i- [一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。. p6 H' Z1 g2 g. Y8 f
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
/ t7 z* m0 a- j! b并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。
% l* a2 `/ E7 ~: ^( |' K. a& x此次更新就是修复了以上问题。+ r! g8 Q! a0 B3 w
- _8 W4 K3 {* B3 G6 g2019 年 11 月 16 日:/ H1 E- s$ z7 W* ]8 U" D7 D, D
1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。: X( Z' [5 D( _" j( \/ |* g$ ^
2、新增 Windows 客户端配置示例说明。
$ C9 S+ F/ I7 `0 J; P1 B Z# P
9 N! a. P- p0 }+ ]2019 年 10 月 27 日:* o$ m+ ^1 g1 ~' g
1、新增卸载函数,使用方法请参考下面的卸载方法。% x# Z& h( ~3 ? W' j2 m& d; p
2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
- N% }: C) H0 X, l ]4 j5 ^9 c- h; d4 n4 K6 v5 |1 S4 ?2 ~1 U
从代码编译安装 WireGuard, g! U+ w2 T( u& f
/opt/wireguard.sh -s7 A# o6 A* p. @7 V+ o
从 repository 直接安装 WireGuard7 r/ B/ ~" w) K+ K/ n: Q
/opt/wireguard.sh -r
$ }$ g9 w$ H1 {% V- f安装完成后,脚本提示如下
! ^2 [$ b; }8 _) EWireGuard VPN Server installation completed( k% o1 \/ Y2 T+ O1 Y( R
WireGuard VPN default client file is below:
4 e: J7 b( j) M% [/etc/wireguard/wg0_client
P! d! [- u' O& S5 I0 |6 e$ V8 `WireGuard VPN default client QR Code is below:
8 [5 p1 G2 S/ K; m/etc/wireguard/wg0_client.png) R6 e5 [6 f% m8 j4 W" ~
Download and scan this QR Code with your phone
# y |& J3 B7 U sWelcome to visit: https://teddysun.com/554.html9 ^ F! \0 @* w/ W$ _7 e+ D
Enjoy it
0 I0 [6 Q4 v: ?卸载方法
; l8 G% t0 x3 t$ ?$ D% d/opt/wireguard.sh -n3 {, r' p/ k' m7 Y
其他使用选项
9 v6 e. o& s! @查看已安装 WireGuard 版本号( m T8 g2 m) N4 y+ |* A5 ?
3 g1 L8 O0 `7 n; G4 J& h, }: g
/opt/wireguard.sh -v
6 s# k% y- o) c) `$ v9 M编译升级 WireGuard 到当前最新版本+ x/ z2 [$ T/ q' ^; Q8 [. `
. h% }" R0 q( @3 [1 H. Z/opt/wireguard.sh -u3 d+ w- O5 I/ N
新增 WireGuard 客户端配置( {3 \: C' T3 \9 m% G+ w* s
R% ^3 @3 A) u+ _! {
/opt/wireguard.sh -a
+ ~4 x3 q) j3 J) y% q删除 WireGuard 客户端配置* t- o1 l1 \2 h- I+ {# T7 S' @
注意:默认客户端 wg0 不允许删除
# m& a, w* `7 t+ ~# Q! N3 x( a, w, `9 [+ ^0 O ?1 @
/opt/wireguard.sh -d
; p/ A( N, q2 z" G& G2 f列出 WireGuard 客户端配置3 \' D7 w, `2 v/ n, ?
# A( M/ v$ F; x" g& c
/opt/wireguard.sh -l
7 W Q6 S3 B8 \4 h; a高级用法- D. d0 Y/ ? L# L
如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。# I9 V! d$ x6 \& b/ M, c
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:$ t3 r. l3 t' k3 |
0 i. y0 p9 Q7 A% p% Z! x/ N* p, gexport VPN_SERVER_WG_PORT=1234
5 f [* _: S" m7 v# g; t下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
6 L0 R; |0 I3 w8 P% H' g; JVPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。& n% O& s9 r, ?. ^7 L4 }8 d, c8 P
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。
" x* Q3 Z w6 r! |* ]' hVPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。0 ~1 Y8 y' S- A/ r9 l/ p# h' K; |
VPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。% `6 ^8 g; D) n! }: ~: o. [ m
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。
! H) V6 G* j; e! nVPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
$ G5 ?3 h8 n7 x7 ?VPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。
6 \3 S9 f$ O" o+ \% S% s9 {0 _1 ?VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。
7 X2 |/ ^$ ^5 J, R0 XVPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
6 l! f* ?/ A, E* z6 @* X, s6 |VPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。
. |3 `* @: H9 {* @VPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。( I/ j( W+ T2 {+ ]/ H* f3 T7 E
1 o t; ^' S* l+ \& EWindows 客户端配置# n4 H( C9 e( d @" Q- J6 f2 E: Z
下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…( i# N* x& T( t9 W9 |
WireGuard 一键安装脚本5 J( M3 M0 X. G, g# z* k
- L: \% D1 t+ l# r6 W& x
此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。
, }3 o9 u+ Q1 A# v) \; G3 YWireGuard 一键安装脚本5 M! G$ c9 |( h& `
; p" g, r% r1 \% V. Q
WireGuard 一键安装脚本/ {2 x; U: S0 m' p6 n
1 D; D+ X, r8 L0 f1 R点击 Activate,就可以 VPN 连接了。5 ?! E: M5 L; Z$ N% k6 ?
WireGuard 一键安装脚本
# P; u9 M& } g9 j" d" u5 D) Q& {* |9 C; M8 J
参考链接4 P1 A- X$ ^8 }9 `8 F7 j0 i; K6 ]
https://www.wireguard.com [3 Q* G+ ? T& m, t5 [
https://github.com/WireGuard/WireGuard
9 @# T6 Q- t+ P/ _. Fhttps://git.zx2c4.com/WireGuard
+ c! r6 }$ b2 x' |, t( s% Yhttps://golb.hplar.ch/2019/07/wireguard-windows.html |