本脚本适用环境6 d& ?7 W4 u0 \1 g1 W+ b. I
系统支持:CentOS 7+,Debian 8+,Raspbian 10,Ubuntu 16+,Fedora 29+
, S; C. P' T/ K: q: X* f6 ]内存要求:≥256M
& [, j0 @+ k% V' p3 k8 J日期 :2020 年 4 月 2 日* u. P8 C! D# F7 b2 I' l9 [+ C/ m
1 s. W. y" I" |4 Y5 @7 w3 o! D! e关于本脚本
, l {* K! o& L3 L- f6 c& Q1. 支持两种安装方式:从代码编译安装,从 repository 直接安装;$ E y1 q- _$ }& [3 L& b4 d- s. ~' [
2. 脚本会创建默认的 wg0 设备,以及 wg0 的客户端配置,并生成客户端配置对应的二维码 png 图片;2 E/ M3 Y. N8 I y; L7 u0 m3 W
3. 脚本会修改本机防火墙设置,如果未启用防火墙,则会出现警告提示,需要手动去设置; [+ k& R; S- e v( Q9 u2 E
4. 脚本会从 1024 到 20480 随机生成监听端口;
7 z! W( N0 _; o U5. 脚本支持新增,删除,列出客户端功能;
1 ~$ ^: b1 g$ \ v6. 脚本支持查看已安装的 WireGuard 的版本号;
: N \5 W# o! k6 i; e7. 脚本支持从代码编译安装的方式升级 WireGuard 到当前最新版本;; o" i8 I7 Z/ b$ W9 [6 p8 W/ J1 G
( J) z% g; h; D4 l+ F
客户端下载; D9 o6 j9 |% C& }
Windows, macOS, Android, iOS 客户端' s( K9 S5 A" u6 W
https://www.wireguard.com/install/5 Y2 l' b9 x7 _
2 k) r% _( W5 d |3 S) Y
脚本使用方法
- q* a5 {8 u2 n0 f. `使用 root 用户登录系统,运行以下命令下载脚本,赋予执行权限:
]8 Q' ]4 h, d1 W. }7 B- d
, d: N+ \2 A+ O* c2 K( m; nwget --no-check-certificate -O /opt/wireguard.sh https://raw.githubusercontent.co ... master/wireguard.sh& N; ^' i3 x2 i k
chmod 755 /opt/wireguard.sh" c4 F3 t0 G0 T" K; K9 o" i' u N1 k
写在前面/ N1 E/ v$ `; N4 i; G9 f
WireGuard 的安装和使用条件是比较苛刻的。因此我不建议在生产系统里安装和使用 WireGuard,除非你知道自己在做什么。
* J" C0 i& ~$ q* W( J7 |它依赖于内核,也就是 kernel,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致。- p" r: y; O& T9 ]
RedHat,CentOS,Fedora,Oracle Linux,Amazon Linux 等 rpm 系的名字是 kernel,kernel-devel,kernel-headers。: g5 H* O$ e* I
Debian,Ubuntu 等 deb 系的名字是 kernel,linux-headers。! q! A4 d T* U, g: p
如果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。0 X: ?; e: R. k W/ r/ u
而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。 j1 I+ A7 f$ E0 [
因此,在某些 VPS 商家,是需要你先自主更换系统内核,并事先将这三者安装好,才有可能不会出现编译或安装失败。/ }/ s- z! _0 I; D) \% y2 \' v$ o
+ U+ ]# k6 X5 c. P
我在测试的时候,就经历过各种内核的问题导致的安装失败。如果你也遇到了同样的问题,建议先更换内核。
% [0 g4 q$ h# p就我个人的体验而言,在 CentOS 7 下更换为 elrepo 的内核是最容易的。这里有个脚本,可以更换到最新版内核,且自动开启 BBR 网络传输算法。
2 j$ t' y- g$ u$ P/ a, u$ H" r一键安装最新内核并开启 BBR 脚本
& B" s: D9 w4 t3 n+ y! ]: l此脚本运行后,最后会提示你重启系统,此时可以输入 n,暂不重启。手动安装 kernel-headers,运行如下命令:
: r9 h1 @$ \+ ~. B8 f; a! x2 ~: H4 ^ C1 C
yum -y install kernel-ml-headers" t2 h; q1 D, ^3 M' A
然后再重启之。运行如下命令:0 R* \4 Y1 @0 Q/ ]$ p1 Q! C
: ]5 ~( W6 ]' W- Xreboot
4 z9 q; j- l& e/ Y. {( L) h7 l m: A重启后进入系统,运行下面的从代码编译安装 WireGuard,基本上就不会出现安装失败的问题了。9 o) h ~# A9 O( G6 X. v7 A
注意:自主更换内核后,我建议使用从代码编译安装 WireGuard。5 L4 _ o" w* p6 w9 s
0 L2 S" c: u8 z' ]
更新日志
6 S: h! H) ]( G$ Y, V2020 年 4 月 2 日:- ]+ `+ W, i6 k; l* k( _
Linux 内核 5.6 正式发布了,内置了 wireguard module。* J, p" y$ P6 |) ?
本次更新添加了检测系统内核版本,如果大于等于 5.6 则不安装 wireguard module,仅安装 wireguard tools,然后再生成默认配置。. f, V3 [4 L- ^( m
当系统内核小于 5.6 时,则依然安装 wireguard module 和 tools,并生成默认配置。
& _' Y0 J; i$ D+ Z. e
, W3 f1 p8 u' B# u# j2020 年 1 月 6 日:0 Y; e4 P) k, Q. \4 ^
一个好消息是 WireGuard 即将要合并到内核 5.6 里面了。" m! w8 ]# E/ A v- i2 c
于是作者在近期把 repo 改名了,从而导致脚本无法获取到正确的版本号。
4 O. b/ b% ?9 x0 T3 N2 s5 [, ]并且还把原来的 repo 一分为二了,分别改为 wireguard-linux-compat 和 wireguard-tools。前者是内核模块,后者是命令行工具。
& k% w" G5 o& C# i# n此次更新就是修复了以上问题。* W9 Q o/ y- M3 z( `
/ M* `( d/ o4 C' H& ]8 n/ h2019 年 11 月 16 日:
0 M% k! U# U) m }3 f) }0 ~1、修正客户端配置文件创建时的各参数顺序,与 Windows 客户端的显示顺序一致。
5 w+ l R, h. N% {0 l! ?; ~2 N8 b% |! e2、新增 Windows 客户端配置示例说明。7 M0 W- X; x1 F9 w$ q" w0 Y0 Y
( T, g6 g5 L, S7 ^2019 年 10 月 27 日:+ ~: T0 ~( ?( g, G- c1 K& ?% Z
1、新增卸载函数,使用方法请参考下面的卸载方法。+ B/ H3 }2 ~5 b7 t7 \. I: T( {; A/ P4 x
2、支持在 CentOS8 下从 repository 安装,或者从代码编译安装。' U; U: g ?% f4 D, J3 [% U
( A# ?# q# M/ w4 L
从代码编译安装 WireGuard
5 x( J# b& j3 P8 [' @7 ~/ K, l% ]3 ?/opt/wireguard.sh -s0 D7 V. Q% {3 ^* ^7 }
从 repository 直接安装 WireGuard
/ }6 Y2 s3 { p, E2 }/opt/wireguard.sh -r
; h7 u* T4 ?7 k: q d' H安装完成后,脚本提示如下
: C, X6 S8 x& F; y4 p; BWireGuard VPN Server installation completed
; c7 U" [; Y0 qWireGuard VPN default client file is below:1 P* Z# |% m7 H9 Y+ O
/etc/wireguard/wg0_client
6 Q9 B8 ^' x2 F! d, a f' sWireGuard VPN default client QR Code is below:
7 C3 w9 E5 K3 Q0 I$ b/etc/wireguard/wg0_client.png3 }8 s# M: r7 b9 ]" ~$ d3 q; y
Download and scan this QR Code with your phone5 c; w. P' {, I& G
Welcome to visit: https://teddysun.com/554.html
# Z1 Y; ]* ~6 ?8 l$ REnjoy it
& t( Y! j* Q( s' u) r2 r3 {卸载方法9 Z: ^5 O, `! a' Q( ]1 p
/opt/wireguard.sh -n
# `$ {6 i0 [& l5 o/ a其他使用选项3 z4 b2 I8 M4 [
查看已安装 WireGuard 版本号
4 i2 U5 c: s7 g) `3 G! s1 k \# @5 h7 Y4 R
/opt/wireguard.sh -v
$ B* S2 o5 O# ]# q编译升级 WireGuard 到当前最新版本' i1 i$ n) i- v( f: }) b- o
/ W5 q! I* G7 f
/opt/wireguard.sh -u
B9 e- j- W2 i6 w新增 WireGuard 客户端配置% P9 q5 l, K+ Y8 M( W
8 O5 j* ?0 j+ s* L d/opt/wireguard.sh -a# H& k2 x/ s& \2 Q% b. @6 b5 x
删除 WireGuard 客户端配置
4 W& e" S, h4 m9 G5 h7 i注意:默认客户端 wg0 不允许删除* `' f$ p ~8 Z$ R( I
3 R- D, F5 l' B9 V; O, L! d
/opt/wireguard.sh -d% f: G9 {* d9 Z# s
列出 WireGuard 客户端配置
5 W" j: B- {8 F
" G; g) r5 |1 L! A: t2 R" J/opt/wireguard.sh -l
; l; Q- z! M! Z7 `& {高级用法
2 K+ f+ w; t" ]' ?如果你在安装时,需要自定义自己想要的端口,那么可以 export 变量 VPN_SERVER_WG_PORT 的值,这样脚本就会读取这个变量值来定义监听端口,而不会自己随机生成。
. h8 Z- ?( V( H7 O+ K, s1 L比如你想自定义端口为 1234,那么具体做法就是,在执行从代码编译安装 WireGuard 或者从 repository 直接安装 WireGuard 之前,运行如下命令:
* L4 U# Z8 \( o) ]
k4 `, x0 z5 L' lexport VPN_SERVER_WG_PORT=1234; _+ z D9 |. m$ d$ D& q
下面是一份脚本里用到的变量列表名(共计 11 个),以及它们具体代表什么含义的说明。1 D' l# H, }, r9 h$ M W$ Q1 [
VPN_SERVER_PUB_IPV4,定义服务器公网 IPv4,如果你的服务器端存在多个可用公网 IPv4,指定此变量的值。
* M' Q. t/ T# h0 {VPN_SERVER_PUB_IPV6,定义服务器公网 IPv6,如果你的服务器端存在多个可用公网 IPv6,指定此变量的值。3 K0 w* B7 m$ D
VPN_SERVER_PUB_NIC,定义服务器默认网卡名称,如果你的服务器有多个可用网卡,指定此变量的值。
3 c0 |' w9 i" ~3 t1 rVPN_SERVER_WG_NIC,定义 WireGuard 网卡名,默认为 wg0,这里一般不推荐指定此变量的值。
6 a% P' i7 Y# I" E1 iVPN_SERVER_WG_IPV4,定义 WireGuard 服务端的内网 IPv4,默认为 10.88.88.1,这里一般不推荐指定此变量的值。
# A7 k% C2 E: x _0 u# MVPN_SERVER_WG_IPV6,定义 WireGuard 服务端的内网 IPv6,默认为 fd88:88:88::1,这里一般不推荐指定此变量的值。
$ [/ n/ n4 Q3 a5 E% q& JVPN_SERVER_WG_PORT,定义器 WireGuard 服务端的监听端口,默认为从 1024 到 20480 随机生成,如果你想自定义端口,指定此变量的值。
" k9 D" |; m& ?8 e' z- kVPN_CLIENT_WG_IPV4,定义 WireGuard 默认客户端的内网 IPv4,默认为 10.88.88.2,这里一般不推荐指定此变量的值。* h6 q& v/ b6 ~7 _1 k* \
VPN_CLIENT_WG_IPV6,定义 WireGuard 默认客户端的内网 IPv6,默认为 fd88:88:88::2,这里一般不推荐指定此变量的值。
6 i3 _5 } }6 K2 eVPN_CLIENT_DNS_1,定义 WireGuard 默认客户端的 DNS,默认为 1.1.1.1,如果你想自定义为别的 DNS,指定此变量的值。, e& }& i- _- O7 w) a
VPN_CLIENT_DNS_2,定义 WireGuard 默认客户端的 DNS,默认为 8.8.8.8,如果你想自定义为别的 DNS,指定此变量的值。' \2 u! P3 k% Z2 q% r- b3 V) D4 A$ {
- Q7 Y) [$ a! v( NWindows 客户端配置* A1 F. T9 p3 [# i m" r& {
下载,安装,打开客户端软件,点击 Add Tunnel -> Add empty tunnel…. E) u9 I7 {; B1 p' L
WireGuard 一键安装脚本
- E7 f- H% S) ^, A& C& P9 E
7 }2 {4 o0 h* X9 X3 Y此时出现一个可以编辑的界面,将脚本生成的客户端配置 /etc/wireguard/wg0_client 里的内容复制出来,粘贴,保存。5 t1 M) W% Q7 {6 \% B( T8 d
WireGuard 一键安装脚本, |0 X& j5 u+ T# |6 a
6 i8 S/ D, s* r \/ ?- m3 r* VWireGuard 一键安装脚本. ~6 U' g% M, L4 Q D# G! o
* B3 D+ I" a6 S0 ^% M$ {) A8 g点击 Activate,就可以 VPN 连接了。
8 @7 ~. F3 {) s3 r8 T9 \& MWireGuard 一键安装脚本
2 w! d5 Y6 N% R1 r8 u, G4 N' v" r7 V* q# J( {0 q+ Q
参考链接8 O5 J/ W7 D1 F7 t+ N4 ?( Z# U
https://www.wireguard.com' i0 R' s }7 N+ k; n, L
https://github.com/WireGuard/WireGuard% d! z" ^4 x9 t5 j( a- ?8 H
https://git.zx2c4.com/WireGuard" M/ j% I. `7 T( s: G) t
https://golb.hplar.ch/2019/07/wireguard-windows.html |