本脚本适用环境
5 R' U, `0 `) K% a系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+/ A; O( I& r% Y3 A/ O
内存要求:≥256M
* M; o; ~/ t$ R% z7 M9 i @ Z: X日期 :2020 年 4 月 2 日9 O2 G' {+ J# s6 h5 |8 n
/ |) U: C# {; ?! U8 x关于本脚本
7 m) P- J- u( F6 ~3 _1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;0 J* D, W! h; S
2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;5 A; S H4 }# v6 ^$ k; h) D! a
3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置;
# V9 \, L% |8 L3 X4 o( }4. 脚本会从 1024 到 20480 随机生成监听端口; h: G$ r R7 [
5. 脚本支持新增,删除,列出客户端功能;
' G& i( }! N& d. R6. 脚本支持查看已安装的 WireGuard 的版本号;( z- a3 ?* a. z& K! L
7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;% o( B3 X$ ]4 B
! `, F0 i$ M4 S
客户端下载2 L6 Z7 g7 W5 s6 d* c
Windows, macOS, Android, iOS 客户端0 E, }. o6 ^) I8 `( o0 H
https://www.wireguard.com/install/
) J( y2 D( h( P% X+ M
9 n& D$ \- r: C/ t& n脚本使用方法
/ Q6 L& R6 k9 L Q. h* ^% z使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:( `( l/ k3 b V" Y8 H7 d* w! e
8 ?2 Z2 O/ z. Q/ d1 ~
wget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh
4 E2 j3 V4 t, V3 u0 E4 [chmod 755 /opt/wireguard.sh
; L, k3 [3 z. @5 ~' G' b2 q写在前面9 W ~1 s9 S% v. T
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。% ]6 e% a/ |" Y
它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。
% ^( H$ {5 @' N& WRedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。% H. r: k9 q4 H2 M# U6 {
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。
9 D3 Y, L: V1 |8 Q! U( E3 e* I5 V如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。
- [ _+ F; f' ?- h1 C而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。2 m- o, p( J' W! H- m. u( Z
因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。2 }9 F& c+ E" B# ]2 s
( K! V! |+ X) n9 \7 e我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。! Y6 G6 m1 B1 O) V5 [2 K" v* h
就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。% F$ c* ]$ x0 x9 j" `! t8 A
一键安装最新内核并开启 BBR 脚本; U" h ~% k" G
此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
8 ^7 I! i' N/ b9 U% _: U# h- R4 H! A* ]
yum -y install kernel-ml-headers
2 e% `4 {; I2 a! u* o然后再重启之。运行如下命令:
! Z/ x7 _2 T+ C7 z) U2 z5 Z% V/ j( K0 Y' X9 Q# L$ g# ^+ h* t- E9 [
reboot
* D6 G6 I. @$ P重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。
/ ^0 Z: j0 ]$ s7 V4 M注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。
. T' [2 a' a: S" U$ ?$ z' w3 b+ t$ L; |, [% w
更新日志& T& @( e4 ~* S% y+ ^) k: f2 Y, ~
2020 年 4 月 2 日:
" _7 l3 T# q3 A- `Linux 内核 5.6 正式发布了,内置了 wireguard module。9 E0 F9 Y+ _, z9 i+ P) c6 n( m
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。
8 L7 f4 D5 E, t4 f( j$ l- E [当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。# I U. s4 ]. F# h3 [
2 l8 M9 g( [5 g
2020 年 1 月 6 日:9 Y! V% o" @# m! d2 K; ?5 v) z
一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。" o5 w4 ?. t' H2 q/ L5 ?5 r
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
+ j4 P4 s: u# b h* l并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。3 F8 Z7 @: o1 |* A: ]
此次更新就是修复了以上问题。
% ~, A0 `* m9 E6 I' q
+ i9 c2 }- t3 ?! k% J2019 年 11 月 16 日:
( y( D1 k5 U' I; u8 _1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。5 U1 t& G. B; a
2、新增 Windows 客户端配置示例说明。$ l1 Q9 P( a; e7 }, Z- O
7 E& p# @1 S: u8 ~4 y
2019 年 10 月 27 日:
9 r8 T0 h! O% i3 {1、新增卸载函数,使用方法请参考下面的卸载方法。) G' v' l+ A6 q7 `- j0 k7 X0 Z
2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。
5 @4 X% o$ q2 Z$ G! { Q. E, A* R# J& y8 I) K8 D' p: ~2 g( O
从代码编译安装 WireGuard3 H: d1 K. J' a! P- ~9 ^, Z
/opt/wireguard.sh -s8 s. h9 g5 v8 r o! e% O: h; F
从 repository 直接安装 WireGuard+ m/ A& j" S, g5 Q8 ~! V
/opt/wireguard.sh -r
) `1 J6 ~( D5 j% ^# l" E; M安装完成后,脚本提示如下1 e! R6 v! T- R& K* B$ J
WireGuard VPN Server installation completed) d1 T# h. X0 E0 S7 A. J8 m
WireGuard VPN default client file is below:
F7 i, k! Q& F \; p9 S/etc/wireguard/wg0_client4 R* }7 D# x* }; F3 t
WireGuard VPN default client QR Code is below:
$ h3 b X" t1 H8 t4 W* x+ Q: z6 g5 V/etc/wireguard/wg0_client.png
" E7 `. D. D2 G' @- L1 Y/ S$ kDownload and scan this QR Code with your phone
( k# i8 y% |* Z0 |' wWelcome to visit: https://teddysun.com/554.html8 i7 _2 A1 C/ p1 D. _. d/ P* A
Enjoy it' D6 |% F- r" G0 i* y
卸载方法$ o" c- U' t/ @" _/ \% }! h; C
/opt/wireguard.sh -n
9 e: T' q( c4 ^2 o& `其他使用选项
3 i, |8 f" j' o( F查看已安装 WireGuard 版本号
- L& |1 [' W3 i* @5 T* I0 B, }! W% W+ \2 M9 A1 R6 f% P, Y6 u
/opt/wireguard.sh -v
- b; i5 E9 V5 Y/ g2 q+ `, q编译升级 WireGuard 到当前最新版本
4 r2 |' m. _2 D% X) m4 H
' B* d7 B' C W/opt/wireguard.sh -u
) w5 k( ]$ x9 W5 W' l. }. ~4 e0 R新增 WireGuard 客户端配置: _' z/ O. c. Q9 M: B; C
? X; ]1 r4 x% b
/opt/wireguard.sh -a
7 x$ G3 C- x/ }* [, o8 s删除 WireGuard 客户端配置/ t( C* _- t2 G) `( } Q7 k
注意:默认客户端 wg0 不允许删除
9 x" v3 B% ^" ~# m0 R* ^9 y3 ]( D! s6 i. Z& J
/opt/wireguard.sh -d. N; o5 Q) `9 H9 L4 D8 [" z
列出 WireGuard 客户端配置, M% g6 |5 t* M' W% ?; R# p4 \0 ~
) k4 G7 a/ L& b, j! a5 U
/opt/wireguard.sh -l
% V$ X- S/ h1 s" h高级用法9 I f T3 A2 E& h" Q5 |. A, {
如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。
7 z9 m1 E( D9 L- d0 u比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:
/ `) {# |$ S8 L4 X4 \8 H/ O# x# Q7 g
export VPN_SERVER_WG_PORT=1234
$ I3 w! `) Y# K下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。
5 k/ q1 p# E- o3 H6 s q9 {9 u( @VPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。 x9 N4 C, z0 b. R4 H" S9 f3 E
VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。% O H1 n' G! p1 z
VPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。
3 p4 t* M: O9 n' j K2 uVPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。
3 y' M# k/ z6 K& kVPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。
0 y1 x k$ J2 j$ i, X& m7 i5 W bVPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
( t' q k% J9 C+ y0 KVPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。! u. o+ {0 T! z5 v( I* J+ L4 c j
VPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。
& q) ]& h/ u, v1 W2 E U2 GVPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。1 }+ c% F4 q* t4 g9 z: E# J" S
VPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。. f0 C* ^$ y7 c# I
VPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。
) V3 q# j& m, R9 |2 \7 g6 X3 i; r& n# B
Windows 客户端配置! L u8 h7 w3 w8 a
下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…
; V7 V6 m7 I# e. y1 YWireGuard 一键安装脚本
, c; k1 X6 t9 \
. j4 m+ M; `0 P! d. I; K此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。: M/ H1 C3 i: p- Y( v
WireGuard 一键安装脚本1 `- n, X6 D+ c1 f, h2 }
# y% Z# c9 `8 y% R" w/ eWireGuard 一键安装脚本" b! T, c: e, Y2 }
9 }2 }) K2 f: O% @5 r+ g- {2 _点击 Activate,就可以 VPN 连接了。
2 q; h! h: p: n1 q; {! i9 h4 oWireGuard 一键安装脚本
* Y6 m4 O6 l4 f% Z0 F
( E/ O* c! B: y5 p+ H# A; X参考链接
# }& @2 U% y, j6 u9 xhttps://www.wireguard.com* p7 p5 z- C7 Q2 p- R1 _2 E/ v0 {
https://github.com/WireGuard/WireGuard" }) F& b8 N! C, L+ H$ N% |
https://git.zx2c4.com/WireGuard, T" ?/ i, W/ P4 Y
https://golb.hplar.ch/2019/07/wireguard-windows.html |