本脚本适用环境5 r9 M4 O. h' E m* B. j) x
系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+
- k/ c; q3 m! L2 ^, P" q内存要求:≥256M$ C8 W1 \0 }4 c' C% X9 k
日期 :2020 年 4 月 2 日
2 E6 J, K$ _/ A# h% U+ h U# P3 I1 H( p
关于本脚本7 K# o5 ]1 q4 Z) e# e* M' ^3 [( q
1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;+ H+ i& z+ a* \8 z5 E& G. n
2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;
: A K7 q* f8 b E) l6 J3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
+ p2 q' _+ k* w* Q p! H9 ?8 U4. 脚本会从 1024 到 20480 随机生成监听端口;
, a" q$ R0 r: I# i5. 脚本支持新增,删除,列出客户端功能;
) L; w- v7 r8 r6. 脚本支持查看已安装的 WireGuard 的版本号;
! o' H6 K6 O6 {' b; M0 ]( t9 A3 N! i z, U3 d7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;
8 F% u" |, s/ t# ?: p/ D; _' v5 q* E j, `4 c7 x3 n
客户端下载" g/ e- \+ ?% _! u ]" M R( r
Windows, macOS, Android, iOS 客户端' F) X) k5 x: {/ r2 G
https://www.wireguard.com/install/
& _8 e5 V; [# `: @# i
& n3 a4 v$ n' p7 ?7 k( H: j脚本使用方法* @& p2 o' v. t1 M
使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:$ F* n( @' A0 N" U
+ }! n$ T$ O3 M' q Q. r) kwget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
% ?7 a( e& _2 O* W4 V% _7 Vchmod 755 /opt/wireguard.sh! z b1 \, n+ _. ?
写在前面4 C) h" m/ z2 s+ O3 L. }: o+ p7 K
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。: n- D% ^9 D5 x' v& {8 X
它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。
! d) M* i7 D/ b2 Y) oRedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。2 M5 T6 v: S- M/ n
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。
! {: b# Z# _) Y& s9 I如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。* ?% n: K/ m& }- S& k
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。
$ d8 p& C2 i4 O C: l F& B3 X因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。( r8 [" `- o) A; a7 R" ?% V
! `4 J% b# u% v2 f a
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。4 A: @# y- y7 N8 O4 k5 P
就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。' o) ^3 i5 h5 p( E+ C& h+ ]
一键安装最新内核并开启 BBR 脚本
" O% _% j* z6 D' Y此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
+ ]# u9 H9 _; Q! @" Z1 a/ L' Q% Q b# D0 N. e) O0 F
yum -y install kernel-ml-headers
) p& T) \2 G8 v, p然后再重启之。运行如下命令:% l) s q* w3 ]3 S* g
6 @, R; J( S" O( w
reboot
1 F( }1 g, K* [ c$ Z5 P: |* _重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。; t) D- r# c9 I* h& F% w0 s& {! P
注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。3 u4 X$ p: r* L/ E6 d- k7 F1 A2 w0 q; M
6 Y8 M9 C9 B$ p: V2 |7 L+ _- u8 s
更新日志
& N0 T7 Z2 l8 t2 C# w6 s2020 年 4 月 2 日:: d7 f3 J; g$ }3 N+ V# F/ ?2 A
Linux 内核 5.6 正式发布了,内置了 wireguard module。# L* {, }$ ?( B9 K1 u" g7 o9 T
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。0 F' w: _% R( `- R, f. x
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
7 n. _3 u: l2 O, V0 T0 T
7 x1 t* R7 V6 q( h- S; l; v2020 年 1 月 6 日: z# F- `6 g/ X8 X% D! U& d- l2 c
一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。 G8 V" G4 e S0 O) P1 f
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。% z3 q% X9 D% Q- L5 W- R' w+ A
并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。' Y, j' N- S4 `* O! {2 V
此次更新就是修复了以上问题。
! m0 Z4 h A# v$ {6 c' j# ^: [1 z
6 p4 N. F5 X, v2 t7 h2019 年 11 月 16 日:) N6 t: ^/ E6 G L' n3 L' i1 ~
1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。
. l) N; {. ?8 J2、新增 Windows 客户端配置示例说明。
2 ~0 t3 O$ s% a: \0 d8 ]- b; v' e
2019 年 10 月 27 日:! o6 J2 P7 ~7 K: \ R5 u& g3 ~
1、新增卸载函数,使用方法请参考下面的卸载方法。
% `3 A! _, _6 _, g2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
# k( ?* q" E7 ~: V$ ]6 _; E- m+ Z5 s7 |6 |. ^
从代码编译安装 WireGuard
( I( q+ l- ^4 ]" p% T! m/ g F/opt/wireguard.sh -s
; C" h, J- _- O( E! r" T- m从 repository 直接安装 WireGuard
7 L/ X4 d- V, x6 f; e/opt/wireguard.sh -r
( @9 ~/ ^! ]4 P0 y! e! b安装完成后,脚本提示如下& b; u, {, @8 v Z* S
WireGuard VPN Server installation completed6 w5 s% f# i8 D! @/ p, L
WireGuard VPN default client file is below:
; M% D8 R3 }+ U4 A/etc/wireguard/wg0_client
& s7 t' R6 U+ }7 q3 VWireGuard VPN default client QR Code is below:
; p: ]* e/ h* ]& B' X- k/etc/wireguard/wg0_client.png/ k) d. [ X' v: m5 W$ m
Download and scan this QR Code with your phone
, R: u- C! \; E1 v. {Welcome to visit: https://teddysun.com/554.html
5 M+ {' ?) ^, }! U6 [; f% wEnjoy it& _( p9 i( q& {5 {7 W
卸载方法
5 Z$ `; c4 Q$ e7 x! J, l7 {. O2 N2 O/opt/wireguard.sh -n. G" o) R7 K: T9 _: j/ _* h* V! l7 U
其他使用选项) `: k/ K4 _) }# a: p
查看已安装 WireGuard 版本号' D$ Q! F. I4 r) g- F
9 D! V4 U. j, F3 ]7 t/opt/wireguard.sh -v
d1 E$ ]2 @1 k# o% D. t编译升级 WireGuard 到当前最新版本3 v1 ^ I9 v6 G( a# q
! \* P6 H0 Z5 E, J) w0 v/opt/wireguard.sh -u K9 C3 \% G! ~$ N* l3 e
新增 WireGuard 客户端配置
) R) d$ K. w/ K5 i1 o8 p! A7 \/ w4 `3 \9 ?
/opt/wireguard.sh -a* |' n3 {# J# P- n: n2 B
删除 WireGuard 客户端配置
1 b+ K! {1 W8 l. u! q1 B注意:默认客户端 wg0 不允许删除
6 K2 ^5 e P" ~$ T$ m' p( S/ g2 i0 g
/opt/wireguard.sh -d
2 [5 |3 k/ h2 ^) }列出 WireGuard 客户端配置( I" F# E7 Y0 s- M' e. t. F7 L
" H" o+ l, X- l( ^/opt/wireguard.sh -l9 t/ b6 q$ Q# R# \8 n. X! ~
高级用法' }* X( r3 r" o: @- a% _( ]+ M$ R
如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。
[3 {" Q e1 x& y3 f0 s( V比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:0 P' ^$ q3 T$ `1 R& _2 d% X. E( x" _
; }. R" w) _ g5 V1 V( N* M
export VPN_SERVER_WG_PORT=1234
# r( n& x% U' ]' U" H6 z% F# ]: l下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。+ J2 a5 X, z& E$ I: M! @
VPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。/ A( K# {9 M/ D% F4 l, W! Y9 y
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。! \3 g% D( G7 H# Z
VPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。; p# z, t5 S; B0 p
VPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。% `. q. F. [0 C. n+ a, r
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。
! t+ h( q" ~6 RVPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。- w% ], y: J( a* \/ |
VPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。
# A. ~' _1 ?1 O, EVPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。
. e% r( R- [) }6 i9 v! R0 P" CVPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
! v3 r! R% d( d' b0 q2 W/ W5 y6 lVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。0 d7 @ ~# \! J0 }8 S. s3 l
VPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。, Q8 f2 Z. A+ H
. W' Y8 p! T: C$ J5 W2 c- c d/ _/ S
Windows 客户端配置
7 o5 U3 Y5 x) B8 D' g, ?* A' l0 x下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…* P; ]. \% H* K4 w; D" l
WireGuard 一键安装脚本
3 ~" a3 V' n( h) A: c
* E6 r# P$ g" m: x+ m7 M. U此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。6 T4 F) I% w$ Z2 u4 X
WireGuard 一键安装脚本5 P2 G0 k7 g5 v7 ]; M& L! @4 A/ z
( G" e( E \- v' vWireGuard 一键安装脚本$ A8 p$ ^+ v! ~! l A; y0 f
# R# A7 I+ B E0 k R9 h3 ^
点击 Activate,就可以 VPN 连接了。
: U- z/ @/ F1 M7 i3 HWireGuard 一键安装脚本* `& l' k l! E, V
* u* T8 w( u3 F/ k
参考链接
3 P, q. }, W" | M9 B1 ghttps://www.wireguard.com0 S5 s; d$ W) e0 c
https://github.com/WireGuard/WireGuard3 i! Q+ B3 _& i0 h1 E5 `1 a
https://git.zx2c4.com/WireGuard
4 d$ M3 o S, G- u, P6 }https://golb.hplar.ch/2019/07/wireguard-windows.html |