|
|
楼主 |
发表于 2025-5-16 14:23:56
|
显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包& v; g3 W( \- p4 x5 I; d- m
9 k" O1 p+ V9 e+ m+ p2 Z: H+ o- C代码语言:javascript代码运行次数:0
' w( }6 y' W4 f7 R* D9 W& t运行
: u+ @6 f( q) q) H. S, [" j ^, @AI代码解释
( S% X- |& y) [- u. V5 Cyum -y update
% N% D' d; K4 h5 d虽然也是可以不进行更新直接安装。
: w- v! t: E [# y# R7 g& n3 s/ S, B. E5 G
安装 OpenVPN 和 EasyRSA
$ R$ P' Y- j9 U8 v7 g* T4 a7 q
) a8 Z: G: n8 o! T% C a安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
, U0 B2 f5 T4 ~$ N% B* c
0 M" ?! F+ q9 y# A. I: K! p# }3 v代码语言:javascript代码运行次数:0
% k4 M. B) p7 T' K; T4 Y S; i& L1 V运行
+ I/ N2 T% `' i' G( N* h7 z, oAI代码解释
% z O3 p2 L( p5 R; s+ {) Yyum -y install openvpn easy-rsa firewalld
% R( t8 G- B7 G) _% L) A7 S0 p如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
( `' O# @' C/ p I- I! i/ V, r/ o$ v2 f
代码语言:javascript代码运行次数:0
) ~. }' h6 w7 _' e% [7 @运行
U Y* a, M+ m1 L- e7 Q. B0 oAI代码解释9 x" V6 W, S0 W# r/ |5 v
yum install epel-release -y
5 H4 M' X1 }( w ?1 T% k( Y! h生成 CA 证书、服务端密钥与共享密钥! D) n2 |2 x& K6 k. |
. Q, ~4 J2 ^$ @( Q# u* \5 ]* o这里步骤比较多。4 o9 u' A( S# U. J b6 N
$ Q4 c! T, a4 _首先需要初始化 PKI
9 ^# Y1 G$ S8 U2 R
( J4 r. }% a5 U+ I$ d- c代码语言:javascript代码运行次数:0% L5 z) r- `: \7 p9 r* H3 o
运行
o V/ r: e* q( qAI代码解释
( `, E" @' l. r7 X3 N' X* s$ d! Ccd ~1 j5 F# I9 n/ g/ }( `4 p* \
/usr/share/easy-rsa/3/easyrsa init-pki
5 V1 Z1 S) C; R( m( O c接下来是生成 CA 证书
/ o6 X2 h! ^6 b! G2 h& J% H* h- k
6 w6 S. t) C% U" k8 N3 }) Z. F代码语言:javascript代码运行次数:0
, o7 p8 v1 d" x' H4 Z运行
9 l* s% D1 w& C2 W4 S* yAI代码解释
# g' b4 H0 @ f0 O2 _. y# A/usr/share/easy-rsa/3/easyrsa build-ca nopass% z4 h9 M! W0 S. Q a1 q3 ^
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。
5 ]3 V* m: f! B# S/ g1 ^. i7 \0 N% {
再来是生成交互密钥4 v( k C3 E, v6 Q. }$ X
2 p1 M. Z; f0 E; F: w& B: I
代码语言:javascript代码运行次数:0
5 j6 A+ I, L$ |: v. S. B* T运行
g7 }$ L; [% XAI代码解释1 t( P- \0 |# t3 L
/usr/share/easy-rsa/3/easyrsa gen-dh4 D: g# O! U O; [
开始生成服务端密钥
8 c& c8 x8 I; y7 h( R
# l1 z7 X# f) I% d代码语言:javascript代码运行次数:09 H9 ]+ y6 v; r! ?/ f5 U
运行0 B. T! [/ k4 @" n* }/ r! j
AI代码解释
1 O, D9 W2 q7 l/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass8 e+ B2 [; e& ~4 u6 k" Q
接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥
7 L% H$ t8 A$ W8 c% y+ l9 R
8 o Q2 o8 e/ t" c! ^1 F5 a/ H代码语言:javascript代码运行次数:00 @5 v* ~8 c2 \' ]! _- u
运行
% ?9 P @% A. kAI代码解释9 W8 e! k0 q8 [8 }2 H. Q/ q1 w, i
/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass, A& S1 b5 b) `- E6 {
最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过( K' q- [" ~, A6 h- H
. ^8 y5 a6 U( a9 S% D4 B( k* a
代码语言:javascript代码运行次数:0
. ]/ H6 p1 L- d; M0 N运行: h: j1 _( r( T* Y
AI代码解释8 F- l3 H7 X g+ u& B
/usr/share/easy-rsa/3/easyrsa gen-crl
# X3 ]' E3 m7 L# m其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥/ @: A& m* V2 A g4 u) s, m3 |2 j
* d7 Z9 c! J- `: u3 O6 R. I! O G
代码语言:javascript代码运行次数:0
" E* q& x1 f! q( B$ L6 r3 W运行+ s1 ]2 Q& s, |
AI代码解释2 `0 v5 i7 Z: i: f
openvpn --genkey --secret pki/ta.key
; e# B8 @! }, I, L2 g {: U在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)8 }0 U% ?5 k4 j
7 `. |& H; C& H5 u. k9 J* o代码语言:javascript代码运行次数:0
, K& J8 D* |- ?6 `/ v运行
: i" }. h4 e0 H8 T! \4 C& c2 g9 hAI代码解释
0 C1 N, N4 i6 e7 H9 E) w9 Fcp pki/ca.crt /etc/openvpn/ca.crt" j- O3 |3 o5 [9 P* Z
cp pki/dh.pem /etc/openvpn/dh.pem7 k9 R$ Q, B0 m) k: g
cp pki/issued/vpn-server.crt /etc/openvpn/server.crt4 e0 J8 h$ T+ h, V+ h0 E6 }
cp pki/private/vpn-server.key /etc/openvpn/server.key# M/ d# j; k' W0 X+ o/ ^' N* i/ s1 \
cp pki/ta.key /etc/openvpn/ta.key
" b6 H7 T- U' C9 B5 m- L4 Wcp pki/crl.pem /etc/openvpn/crl.pem! C3 _0 [+ ?7 }/ c1 `
配置服务端% n- K* a: A4 y' o% \- r3 x
& y" }0 x0 Z, f( w! c) m$ @# BOpenVPN 配置文件有许多可定制化,具体请查阅官方文档。. f) `2 G" \! i: z
* j+ ~- W: U7 ]0 O/ M& M代码语言:javascript代码运行次数:0
1 m G( m* _7 p' h2 {6 d; Z运行; Q9 H9 ^ _( p
AI代码解释% I0 s2 ^$ V9 {3 c2 D
cd /etc/openvpn
z- d- g v* t$ U0 U& y ^vim server.conf8 N- y1 { q, L7 P$ G$ Q
将以下内容粘贴进去
7 l4 N# Q4 u V4 Y0 x7 L& H8 L! Q$ }9 J; W4 W" N4 Y ^
代码语言:javascript代码运行次数:0
- l3 n5 k) A* e/ `运行8 o- u3 n! D% t+ b
AI代码解释9 z/ z$ a+ S! i' n' y* F# X
# Secure OpenVPN Server Config$ w2 K/ v7 Y3 `- P: Q& Q
# Basic Connection Config+ r/ {" b* k0 Q
dev tun
6 V) G" Y: a' ]9 ^3 }proto udp
( N% `) @3 @% Z; Uport 1194! e1 B \# Q1 W. h3 K' B2 u7 E* t- E. w
keepalive 10 120
! Q% l& Q% K9 cmax-clients 5( b' L @4 n% H7 h2 ~2 l; ^
# Certs
! G2 d& @( u+ ]; I d2 ~/ J) l# uca ca.crt
`$ ?) w+ x6 Qcert server.crt
9 `5 w- s, O5 h9 S! s. B3 ckey server.key
: _) e4 T* \$ ?7 Y( ]9 Ydh dh.pem" ~% K8 n, _$ i- x6 H$ v: A) F3 G
tls-auth ta.key 0
" K; ]$ P1 K' @6 e# Ciphers and Hardening
/ M& [% V+ B/ A; J1 {6 ]6 ~reneg-sec 01 x6 n4 A* s" M2 {
remote-cert-tls client
1 }9 U( o5 s3 i+ }) T" \crl-verify crl.pem
2 C6 X: w( ^/ x! _& P* ~tls-version-min 1.2- Q6 O: b& r) O
cipher AES-256-CBC+ |5 }7 U/ V' m! I0 r
auth SHA512
) w# t6 j$ \! P! z/ Qtls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
: O# j' M( p+ a) j; t9 o& ^" A& [: S# Drop Privs
* @5 e) h/ ]1 ~: } kuser nobody5 N8 i+ a0 D, b0 l% w( `
group nobody
3 z9 P7 q4 I/ S# {# IP pool7 m' ~$ u$ t2 x+ e( N# D
server 172.31.100.0 255.255.255.0
6 D: _) [& O6 V5 Z0 wtopology subnet
$ Y, [) R% g3 _7 e7 e6 j, ?ifconfig-pool-persist ipp.txt
& T, d8 S& {$ v, h" v# m8 e$ e0 Yclient-config-dir client3 A" W1 Z1 U5 I1 g3 Y& a6 }! f
# Misc/ a% v/ F. r) o A
persist-key: _+ Y* r8 L% i- E y, x
persist-tun: ]5 i2 r& g' V7 ]7 S7 m* m$ X
comp-lzo# _, L+ L7 l8 ~) C& s
# DHCP Push options force all traffic through VPN and sets DNS servers- ~. k( g$ l- g3 ]3 K O3 w9 t
push "redirect-gateway def1 bypass-dhcp"
' l0 c3 g) `+ [/ [push "dhcp-option DNS 8.8.8.8" p% A/ O% u# f W& e( o
push "dhcp-option DNS 8.8.4.4"
7 H/ D( b: m/ U* I6 ~0 } n# Logging
" g; A& H4 w2 F: ]: w% ~9 tlog-append /var/log/openvpn.log% y7 v7 K! A* v. p$ `* G! y4 n
verb 3/ c$ }6 P8 d( b
启动服务端并让其开机自动启动8 Z; ^$ s, t' [5 B4 y6 m
3 a! _5 B" q- _代码语言:javascript代码运行次数:0
5 w2 U' o3 L5 R( X* l运行
" X0 ^/ D) A. {% F$ JAI代码解释
4 x0 }2 J& a$ I; r: M) a9 L2 gsystemctl start openvpn@server
/ D/ {5 z2 W0 {$ L8 h6 bsystemctl enable openvpn@server% K: v9 v* s# K2 ]: X+ L
配置防火墙与流量转发
1 d& ], Z4 Z+ |5 @! q9 ^$ a7 c5 {
" @; E0 K% E2 `( i* Y' R8 N放行 OpenVPN 入网流量与开启 IP 伪装+ b( D D+ \7 p: j& o( X3 D1 Z
. b( [8 X; B! `2 a1 Z5 I' T
代码语言:javascript代码运行次数:0; V5 [, X% t. D: p7 T
运行+ M$ \( U$ r+ t+ Y2 T! u/ T% @
AI代码解释. b/ D/ x/ }3 r& W
firewall-cmd --permanent --add-service openvpn
) r5 H' `: [7 {# m0 L( |firewall-cmd --permanent --add-masquerade
y3 K: O$ x: Gfirewall-cmd --reload
* u) _( J, Z7 D& _检查是否开启流量转发( r4 Q, r g* c) s+ ^
; P, c; b6 ?; N/ [- n- n
代码语言:javascript代码运行次数:08 `+ u1 F8 W. g' o6 i0 p/ j2 W
运行6 D. i0 `* |0 Z
AI代码解释8 c( J4 o2 ^3 Y, C7 C
sysctl -a | grep net.ipv4.ip_forward* u3 g: _, S9 ~8 S* g: r' l
确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下 z! K( v! Z5 k; q, |9 h9 }8 s
1 i# E) W/ f7 N代码语言:javascript代码运行次数:0) ~6 V3 G$ R( t' }8 w
运行
+ r9 }& B4 U' u& C7 {5 E& bAI代码解释$ e. Q) e5 i' [2 b1 W8 S) N) x
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
2 u$ y' D5 q L6 u. n2 \sysctl -p
0 _/ x1 u" a# P# b配置客户端
) f3 u+ Q0 K" A+ o- Z
, w) z4 @8 u# m客户端需要拷贝以下文件/ u7 G4 a) F0 B1 _7 _2 ^" n" `
5 S4 h8 E. ?* q3 w5 n# ]9 N. Y1 I/ c代码语言:javascript代码运行次数:0
1 f6 b5 b) p& f( g运行
# G0 q U" q5 g/ q( NAI代码解释: ]* w! \6 N5 _6 c8 L4 T
cd ~
; `3 j+ v5 Q, z R; j0 l, {mkdir vpn-client-01-config
( ?: l4 w. C* A! I7 ^; A4 |, ]cp pki/ca.crt vpn-client-01-config/ca.crt
/ Q o) n/ X) B( B: n9 `6 B' icp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt1 o/ B+ d9 B, f4 J& |8 {: S
cp pki/private/vpn-client-01.key vpn-client-01-config/client.key. E: l# m% D. Y5 u% Z, s( N6 I- h
cp pki/ta.key vpn-client-01-config/ta.key; t+ U+ B8 A. f! X* |. E$ H5 J
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容4 S2 x; Q& i z0 z# p! W: E. I
$ ~8 k8 l# F- W+ @; c- p2 z代码语言:javascript代码运行次数:0 O+ a0 [' v* ]/ L7 r) o. {
运行( z B6 ?, s$ m
AI代码解释6 V" E. Q6 @* S
# Secure OpenVPN Client Config% v( B. m4 K' Y
#viscosity dns full
. z! M! F, [( a' `8 Y# d- w#viscosity usepeerdns true
- n4 O6 ?4 ^- F0 T2 k" _ T1 t#viscosity dhcp true
; g9 Q6 @2 `& A7 p8 p, w4 @tls-client2 s6 e- S% y6 J
pull4 O8 w2 G) S& K
client3 Y- j$ }9 j! r2 v
dev tun3 h" Q2 x7 `3 w y
proto udp
( P P: C. f: f1 ^remote 123.123.123.123 1194
; j% M1 z: N8 N1 predirect-gateway def1' d" @; {5 ]& @* J7 f+ X, t6 {5 W
nobind
5 N C" J5 T; K9 Z) Jpersist-key& z! ~" K% q! L& v) D9 L% }2 B
persist-tun
& M6 J+ G B5 {8 M( ]comp-lzo
4 W% k5 {: K, _! n0 r+ pverb 3 O3 |) ^, H7 t. ?3 j! {5 R
ca ca.crt
; l( ~7 L: o5 l, K( Ycert client.crt+ o; Z8 t. f* i3 {3 `9 |# p
key client.key7 M* X7 M0 t" X; u: i4 x8 x8 S
tls-auth ta.key 1
0 {9 r( I8 r% J0 J8 x( @0 t' ]remote-cert-tls server
8 o3 U* X7 e) M) d. V; ~. a4 pns-cert-type server; G, H! A- \; P, P. ~( L( q
key-direction 1
) {" ?' U! k* r) g) R/ ocipher AES-256-CBC8 S1 V$ U) u2 Y5 \2 \" v
tls-version-min 1.2
! E4 Y/ l3 y) U" w1 Iauth SHA512
R0 l- J, ^+ }2 s# a3 N2 r9 xtls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
3 _; v8 U7 m8 I" b6 dremote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。 |
|