本脚本适用环境
2 B+ d& |1 x5 h. `$ M系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+1 I# d; v3 V# B) w8 F% i. s) n
内存要求:≥256M4 r* p# R+ k5 U8 D
日期 :2020 年 4 月 2 日- n3 p x/ q. v6 a2 y0 a
3 T `5 H, }( \" f关于本脚本& Q2 d/ Q* m- L& z' |- [
1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;
$ w: p! r2 d4 ^, c2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;( K# ?/ m s/ n, Y" N+ q2 m* L4 l
3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
- v+ M9 c9 k' E# ]" G6 L4. 脚本会从 1024 到 20480 随机生成监听端口;
: D# A4 }+ E, f" c5. 脚本支持新增,删除,列出客户端功能;6 v9 ?! [, w! y, i0 K
6. 脚本支持查看已安装的 WireGuard 的版本号;2 W9 ^ F& Y( U" A* x/ e
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;
: S5 p d% u5 T) C, H4 h
' Q+ W/ r7 @3 t( t; d1 c' g客户端下载# e8 k; ], P9 K. J* S# X
Windows, macOS, Android, iOS 客户端+ F9 Z2 G8 i7 | t. ]; L+ {
https://www.wireguard.com/install/
# g( R U1 n9 G- i( s9 R$ E9 J
脚本使用方法1 z/ R6 }# K( G. p
使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:
, H: ?* |3 o1 A1 S6 F- C$ n
! O' v7 H5 u* @- [wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh9 n7 m& z# }$ ?
chmod 755 /opt/wireguard.sh
+ y! m! d. Z. v8 I写在前面
0 A2 n8 c+ R: t2 }5 X3 t: jWireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。
( l: Z, Y: D" y! V它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。' c1 _9 Z! t8 q, x) A* |
RedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。
. V" a4 i- m& i0 O/ wDebian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。
7 S- }# K+ ~( @: t3 _+ g0 A1 B$ O如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。
?; @* I Z& q而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。
% o% J1 L8 t1 A因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。0 f9 y# H) s2 E+ f
) z4 A0 O) g8 Y0 B3 P6 j, X我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。 D) b7 m, D$ \3 r
就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。" s: \( E* |6 @% r. v
一键安装最新内核并开启 BBR 脚本
' i2 |; O ?; N此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
) y) c m1 Q8 v4 |' ]4 s
0 @/ \5 `1 h( J' z- r# [yum -y install kernel-ml-headers
3 W4 n0 D; ^# _然后再重启之。运行如下命令:
6 F' \7 Q- W/ D: V2 L; S+ e2 @9 C# h8 C6 B0 Z, E' e! t
reboot
. J% w7 h+ |1 M+ H重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。- b% J* B4 [* E9 o& O& M/ W
注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。* S4 N( R5 R# k; D- l5 r
! U! ~. I* }7 x* W, }
更新日志
7 |& s" g) s0 |& L2020 年 4 月 2 日:
K) H+ o" D: v3 D3 wLinux 内核 5.6 正式发布了,内置了 wireguard module。; k i' T1 u2 m! m8 o
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。, h0 y. v! U. N, R* ?4 @3 B) q8 O
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
3 h* `. l$ a. T( K! {
& A% g' a0 ?8 F2 v% }1 ?* @2020 年 1 月 6 日:
, @, e3 P* l2 n8 r8 C% F1 O一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。; K1 E- U! o, \
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
$ S7 f: u5 i0 h9 A! K! P! I并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。
* P4 o. [0 D0 s9 h# l6 B- _' O9 V! U此次更新就是修复了以上问题。
7 Q) K2 h" V) W( \& \ D/ ?8 ~
! S/ m7 i& _7 `; Z2019 年 11 月 16 日:
9 o; T' Q0 H; J1 T* R5 y2 i$ P z* Y1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。- [$ M- a% H! j) k5 `; G
2、新增 Windows 客户端配置示例说明。
/ s0 o! b8 @* X( r
, c3 u6 }6 L2 K' u5 j2019 年 10 月 27 日:
- r% V F# W) T- J6 T N1、新增卸载函数,使用方法请参考下面的卸载方法。
/ R6 f8 e$ |" Y0 |/ _. s; G7 K2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
# T2 P. ~* k% E, G- U! t6 R8 H/ ^" n) m) k, G
从代码编译安装 WireGuard A& z4 b/ p& S0 g @( v
/opt/wireguard.sh -s
! c! \- X% f) m- ]: q/ a; v从 repository 直接安装 WireGuard1 a y" S- P# s0 m: x9 C: G: k4 P
/opt/wireguard.sh -r
6 C) u/ |% K |安装完成后,脚本提示如下
9 n' O& |* p! O* mWireGuard VPN Server installation completed
! c& y {+ U; eWireGuard VPN default client file is below:
+ u* G; p; e: l3 d9 o! h/etc/wireguard/wg0_client
0 M/ F' G: E4 v* \WireGuard VPN default client QR Code is below:4 v" l& [& U7 o7 `0 O( V$ F' L
/etc/wireguard/wg0_client.png
, l) o- @# z7 A7 C. L; qDownload and scan this QR Code with your phone
5 {) C2 V# Q! e" dWelcome to visit: https://teddysun.com/554.html
. G: K! W6 x! g; n9 EEnjoy it, ?) Y3 ^# A8 B5 E1 G
卸载方法5 r$ _9 s* b7 g0 c" c
/opt/wireguard.sh -n6 O3 B* N( m/ M2 s0 A
其他使用选项
; h" W a- Z0 @6 t$ ], e查看已安装 WireGuard 版本号1 z, X4 g2 P: p" }6 k
$ G, g' u8 q# |
/opt/wireguard.sh -v
* F1 ]4 k; h# h% \5 p9 a9 m编译升级 WireGuard 到当前最新版本
- K: l2 X2 E* Z; ]! ?/ d" ^2 D9 m" v* S. b5 i
/opt/wireguard.sh -u7 H" r/ ^' j3 }
新增 WireGuard 客户端配置
& X# Q& }4 G J
0 E/ G& r! X+ P5 d. ^6 A/opt/wireguard.sh -a
2 O5 ?$ s/ Y9 s% v5 ?2 p" b删除 WireGuard 客户端配置! I. V* u/ c4 Z! O ^7 o! ?
注意:默认客户端 wg0 不允许删除! n0 Z' p3 e; O! i# }& P0 o# g
" X; T& B, N& l( z/opt/wireguard.sh -d2 g0 M$ m, o4 s8 _
列出 WireGuard 客户端配置# Y8 T# @. z+ l4 W
2 {4 x2 {# V9 x$ v+ U' H/ s
/opt/wireguard.sh -l
7 |/ h' g% F3 L" A% w2 X高级用法
# L( f" Q' f5 U如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。% D t u! }' ~7 B3 n( P, e3 y" [
比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:
/ ]2 Y$ I C, f5 \$ ^) Z
5 N, g7 T- h! Nexport VPN_SERVER_WG_PORT=12344 `& {8 H6 x. a2 k% G! Z
下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
( T$ ~, o$ j+ IVPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。
" s0 {" z3 D" l/ ^( r% W, SVPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。
8 G4 g! C0 A" Z9 C. H% G# k' G# eVPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。" r5 g* T$ S/ N& ^
VPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。5 z* g C& y; D* R5 Z- s6 v: |
VPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。$ }7 f3 ]' s/ z8 N0 W) X6 m) ]+ k& U
VPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。, x- p a0 I3 B `
VPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。' l5 _, p3 T: V! T5 R
VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。
! n6 \, s4 L/ YVPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。! y& r2 ]! o( S6 U# J
VPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。
, o/ e- A. ?# L2 R0 d% G! cVPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。
# N' F% t& a( [- T- S+ o* a# \5 j+ F7 Q$ J g3 W6 y w7 e& x/ e
Windows 客户端配置
% e2 k& E" ?5 M' ], a下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…4 y4 G; Y$ f7 {) A, @- b
WireGuard 一键安装脚本
0 B6 a) r& |- {; K8 g$ t4 y/ [$ h) k4 B. s# y/ ~2 D& `$ @
此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。5 R0 N; q. b' _7 N: L
WireGuard 一键安装脚本
) y7 ^) b4 Z; T+ u: f
3 \4 O2 e7 l% P% S1 [WireGuard 一键安装脚本
3 R! B! R% I4 q0 R _+ q X7 F$ I4 T" G2 `$ ~2 q$ q
点击 Activate,就可以 VPN 连接了。
2 `7 Q5 v3 ?1 f2 p! d$ OWireGuard 一键安装脚本4 n2 v: {$ n* |! D
t" k" m9 _, n3 X" q& n参考链接1 p2 j0 `" Y1 W7 R. o8 x
https://www.wireguard.com
6 m& a- q/ n+ l; j9 h0 n+ `5 ]$ phttps://github.com/WireGuard/WireGuard/ k$ }: f+ O8 g3 ^6 i- n
https://git.zx2c4.com/WireGuard
7 o3 c( r8 U8 X5 V# j9 Rhttps://golb.hplar.ch/2019/07/wireguard-windows.html |