找回密码
 注册
查看: 206|回复: 8

Centos7.9系统安装OpenVPN-超详细

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-5-3 12:01:31 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 2 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-3 16:31:13 | 显示全部楼层
at > /etc/openvpn/checkpsw.sh <<"EOF"' B0 c; T( v% G( ?, E4 Z! j
#!/bin/sh
6 b; A6 _# A; G" ^3 F###########################################################
# q2 J4 O& I! J& K1 b# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>* O3 F; O6 I" b- G
#
8 q& @2 y$ W/ z% W# q3 i# q# This script will authenticate OpenVPN users against( C3 L+ F+ Y8 C  t, `; c2 v
# a plain text file. The passfile should simply contain' N+ Z: ^+ R, t* s
# one row per user with the username first followed by
8 [! ~$ u! L% n( T# one or more space(s) or tab(s) and then the password.
: @, ]/ Y3 x* c7 ]$ WPASSFILE="/etc/openvpn/psw-file"
+ J* U# E0 B) D6 \( a) X2 zLOG_FILE="/var/log/openvpn-password.log"  L3 t& P! L9 h/ i) e1 f1 t
TIME_STAMP=`date "+%Y-%m-%d %T"`
& A: F+ J% ^4 d, f& B6 b###########################################################
8 G# H+ X, P4 y! A% v2 Hif [ ! -r "${PASSFILE}" ]; then2 d; v: h5 E2 G6 e4 R. M( K5 Q
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
7 R* M. k# E0 ~& f  S2 g; \exit 1  ]- o4 ~- Q6 H+ @  M7 o# @
fi/ U: i( E( Z5 R0 P5 X
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`1 h1 J7 F$ B- b6 }0 @6 o
if [ "${CORRECT_PASSWORD}" = "" ]; then! `& Y9 s2 ]1 q( O5 }! _& y3 U
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}. W+ J/ Q0 V! L3 C, q
exit 1
. m, G# z9 N, \" p2 l( H9 h4 [+ B% zfi
* d5 ?4 `$ \1 r  c% H6 Zif [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  V# p5 I. K/ \4 [- F( P3 }, yecho "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
! v' F. U: [' \8 Gexit 0
4 d+ \$ }6 j! d  I* Cfi
% W9 ~' V; U" _6 e+ V0 w* necho "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
- [, X2 j# N& Y/ zexit 1
+ g, q8 a, q0 H; lEOF' y4 G7 `$ _0 y8 {# C

; \4 N5 q; E# u% t) g2 O* Bchmod +x /etc/openvpn/checkpsw.sh
4 G6 m$ A2 @0 p* G4 Wsystemctl stop firewalld, o, d4 k: W- Z8 y1 e
systemctl disable firewalld# m3 ?& I8 z& K$ i4 {
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
8 a0 P+ x; f- l) Psetenforce 09 \. B: i( Y8 L
systemctl start iptables
! l; j: }! O9 I: v' ~' gsystemctl enable iptables
; R% x# _/ ?% n# e8 Q  eiptables -F0 f) K, A$ C. o4 D4 r
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
! ]9 v/ D. e2 V  Qservice iptables save
: N7 x, _  h6 j6 ]systemctl restart iptables( T# ]6 }2 Q2 b* ], m( d& E% d
echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
1 I3 X- n3 r8 z8 \1 `sysctl -p
# m5 ]+ ?0 i2 B8 d2 B: k4 r8 q1 e. W  Ksystemctl start openvpn@server
0 O* M  m2 q6 `$ \systemctl enable openvpn@server # w, l% F' Q5 _* X
systemctl status openvpn@server
$ K* |( q3 Q' F6 `3 ?
3 `8 K5 f2 i% |1 n' z; j; Recho ''>/etc/openvpn/openvpn.sh
, ]; O9 g% j1 ~  a3 F% {touch /etc/openvpn/openvpn.sh
$ Y" V$ p) p- X3 a/ J) ?$ Ccat > /etc/openvpn/openvpn.sh <<"EOF"
. I# F! L! W5 w6 u1 C#!/bin/bash
+ k) G6 F8 O6 ?2 x8 q1 i6 A#by openvpn useradd" g5 _, M- Z  Q+ Y
#name LLL 2022年02月23日13:48:55
! I9 ]6 h" J" l0 w, w+ H###########################################
% d4 T2 u( }* L. r% q! }1 e#user="$1"2 w$ Q. S  m3 o9 v- s
#pass="$2"5 V, _0 _7 W: \) R9 n
#ip="$3"
: q- Z2 A4 f, L2 |5 V! {$ W' S0 feasyrsa="/etc/openvpn/easy-rsa/3.0.8"9 l* g4 ?7 {" R9 T. e" |/ ?, z, C* H
function useradd(){
" e& |& {+ d* c: a) T' _- D7 Mread -p "请输入用户名:" user$ i: \7 T) u0 A/ D4 x: C: g$ r
if [ ! $user ];then/ F9 m6 M  U4 B' R# a3 q
echo "user is NULL"
0 S% B! z6 d8 i4 O; o5 Nread -p "请输入用户名:" user
: w2 v" a2 e# {7 }0 d4 s9 dfi
. A7 I4 g* I5 c) _) O( Fread -p "请输入密码:" pass- H' @" @6 ?8 B. A$ j
if [ ! $pass ];then
2 ~- \+ A3 W$ n( Y1 wecho "password is NULL"  J# {) n& j3 I5 ^; J$ S& d
exit
5 o% ~9 b* F. }1 d& Z# y4 ^fi
+ P% x! b. D' g, d) nread -p "请输入IP地址(如:10.9.0.6 10.9.0.5,IP地址以4个为单位增加):" ip
) A! o, r& |) _2 r& bif [ ! $ip ];then) \5 D, m6 T$ K7 P4 k/ O7 V
echo "ip is NULL"
& I( {+ I  G3 K: t: g( kexit3 v7 P' W6 a3 b3 Y* Y& {8 ]  R
fi7 I1 A& m/ M5 W: s; {0 a- M# c+ N
sh /etc/openvpn/client/ovpn_user.sh $user
: L2 b( Z6 O  K. {% {( @; ucat>>/etc/openvpn/ccd/$user<<eof) t( \, X9 U# i  E) M
ifconfig-push $ip
6 P' w( a' v, _( n8 p% K: V, Zeof% E* a5 D8 d) H6 S: h2 @2 P5 Q6 a
cat>>/etc/openvpn/psw-file<<eof7 K2 u7 G/ b1 F- Y! p
$user $pass
& ^# h! b5 e) d* D) F7 Seof+ j% [  i* R7 Q, U+ V
}/ a2 I, V, L, R3 d# I0 W
function userdel(){2 m# U) D$ Z& t' O/ X+ y; G4 H
read -p "请输入您需要删除的用户名:" user" p, b) w+ D4 f
if [ ! $user ];then4 k6 F; Q% D, g2 |( k6 N
echo "user is NULL"
6 H, C5 `- d* d9 Z7 z( D6 Nfi& {- r6 n, f6 j( \
cd $easyrsa
' p/ c* |7 R! [' |3 t: x, Zecho "-----------------------------------------------------------------"( g+ H* _5 f0 y9 t
echo "出现continue with revocation请输入yes"
5 t" Y3 @7 T* r7 R1 K' r. techo "------------------------------------------------------------------"
' g- M3 Q' V( O( I! b, l./easyrsa revoke $user
5 N. @: ]1 e4 F' \./easyrsa gen-crl
6 v. P* n; }- F' ~rm -f /etc/openvpn/ccd/$user1 ?+ K( h* ]1 M, a+ r# q
}
6 O8 }" ^* C/ e% B7 A% f+ x* b9 Efunction alter_user(){
) @* t4 L# j3 M; E: u1 _. j! qread -p "请输入您需要修改的用户名:" user( F' z! a( Z/ H! _, V# h; V
read -p "请输入此用户名的新密码:" pass
! t3 i1 G; E0 l1 h. o# J. xsed -i '/'"$user"'/d' /etc/openvpn/psw-file  @0 e# }. i8 M  C! p# H" W5 i
echo "$user $pass" >>/etc/openvpn/psw-file
3 Z; A) x$ `, D8 }}
! {( s0 o$ j( S2 k" \! vfunction alter_ip(){
$ o- m' Q2 R0 `9 n8 f3 G, Wread -p "请输入您需要修改的用户名:" user
7 }: V6 L2 O- u' H/ G5 c$ e( {if [ ! $user ];then; i/ O5 `4 I$ ~
echo "user is NULL"  k0 q4 o- b2 j5 R6 V+ g/ o/ ]
exit0 K& W1 t5 t/ H. N% ]( ]
fi
" d! l( K, T# l- w$ xread -p "请输入您的新IP地址(如:10.9.0.6 10.9.0.5):" ip
8 E; W: @4 k( v. m( n" d0 q. bif [ ! $ip ];then4 ^8 y3 S; ]# a* N7 w
echo "ip is NULL"7 y9 \) I+ v6 E1 J
exit
2 s- G3 P" v' f  Z$ K& Ufi$ x, b, {# P5 S! ?: ]2 z
echo ifconfig-push $ip >>/etc/openvpn/ccd/$user- D8 ^+ {! ?# c/ A4 b# V
}! [" H/ Q/ R# g  N& o
echo "请选择您需要做的操作选项": H* T# J. M4 K4 h1 Y- N' s
echo "----------------------------------------------------------------"
# f) P& E4 d! ^# b3 ]# k$ p  E3 uselect VPN in "创建用户" "删除用户" "修改账号密码" "修改IP地址"
( f$ T) X+ x, e/ c9 a( T: tdo
: T* X, r( L' _5 M6 ]. B2 ~case $VPN in
# o. c9 Z+ j; J2 \: @7 E+ y& R创建用户)
0 k( \1 E4 B( U( Ouseradd
; [, M( `4 \7 ?8 F;;
! s  _8 ]% W, p# Y% y' n& }删除用户)) w( D8 P7 ^, v) E
userdel
8 C7 x$ q; ~8 ^- h: m# |;;
! y* Q$ b' W* U8 D  p  {修改账号密码)- e/ {+ T( w6 C0 j
alter_user; @* m( B8 }- f; X, j
;;
+ S2 y4 d/ D  _, b' a修改IP地址)$ K6 u. \- [( g" Z1 m# h- N# C6 x
alter_ip) a, y* M' |/ X. k
;;
$ W4 I+ D' b$ M  @( x+ Cesac
; p6 v( Q" x$ Qdone" K* c* S! `6 J0 e
EOF5 B; ~  N1 K$ Q2 C9 U

! M9 x5 ]8 v8 G; P/ n' xecho ''>/etc/openvpn/client/ovpn_user.sh
6 j  \  o5 X6 h& T% ltouch /etc/openvpn/client/ovpn_user.sh- z8 `. r' m* w3 f0 o+ }
cat > /etc/openvpn/client/ovpn_user.sh <<"EOF"0 d! G" R. J: z0 e) l& g; e/ B
# ! /bin/bash7 {2 [+ [. p* p" C, t5 @
set -e4 R  e( ^8 g3 n
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
) n& [9 }: t4 K% A5 q" @: Q: y; DEASY_RSA_VERSION=3: t! E) O4 x! ?* p. e$ j
EASY_RSA_DIR=/etc/openvpn/easy-rsa/0 ]0 W& D; F6 D
PKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/pki2 {/ ?; l8 Y- o7 r0 c: x1 ]
3 I% I( R# Q$ ]" p: R  m9 T
for user in "$@"
! m; o8 W4 a: z; hdo/ [# L8 M; p# s/ v( I3 Y8 f+ x0 M
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
  o+ ^# h- t$ y. ~6 \& Y4 E6 Brm -rf $OVPN_USER_KEYS_DIR/$user" Y9 K2 e: ]- k% g6 n2 \! M5 z" e( o
rm -rf $PKI_DIR/reqs/$user.req
7 V( f+ h$ `5 r4 wsed -i '/'"$user"'/d' $PKI_DIR/index.txt' w1 _" S" e0 n0 n( K# m. G
fi) Y' c& q- [% {" E
cd $EASY_RSA_DIR/$EASY_RSA_VERSION
8 \; u, i- r5 @: |6 ~# 生成客户端 ssl 证书文件4 c& a" |7 S) S8 L1 W$ N$ m. Z0 h
./easyrsa build-client-full $user nopass: Z4 K0 g8 d4 `# s* C, ?
# 整理下生成的文件2 Y- _7 I: Z) d+ P0 F$ w
mkdir -p $OVPN_USER_KEYS_DIR/$user9 R7 {0 l" _3 O0 E
cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书" M  s( |. B& j
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书1 i+ s7 V2 Z: L8 q$ s
cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥0 i* r+ s, y. K8 \
cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
6 s4 h& }2 r& }! d+ N# G- }' ased -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn: x) H( s, D& S- {; ]
cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件6 @4 D! ^9 H/ L% L0 O$ M! {# y7 c
cd $OVPN_USER_KEYS_DIR. d5 T( V$ J7 E7 U
zip -r $user.zip $user/ {/ \! \6 ?6 g* B
done2 t9 }9 K3 ]. c3 ?" V+ ]7 E# C. s) v
exit 0- a1 w4 |6 Y5 [: M) h7 ^
EOF
) h/ ?/ ?* ^( Y1 X
" y. ]) X+ `) R$ ^6 w  E' yecho ''>/etc/openvpn/client/sample.ovpn
, i, O! u( `5 G  d9 {1 Wtouch /etc/openvpn/client/sample.ovpn; q  m# g  o% P# c! N* ?  ?6 W
cat > /etc/openvpn/client/sample.ovpn<<"EOF"

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:11:31 | 显示全部楼层
# 监听地址! r3 y: E4 F( V3 W/ Z
local 0.0.0.0  
" E, D7 O" U$ _) z / ~6 s- ~$ a! u! u3 Q/ ~
# 监听端口
3 u1 J7 L' e+ K- G8 B8 [port 1194  
& Y8 W% q& U! r0 q5 R
! ]# K8 k' y" h  }0 E# 监听协议* l1 q5 j1 `& r
proto tcp  1 ]* y0 n% c: J/ k8 [4 g9 w
* [) K) W/ k  J% s
# 采用路由隧道模式
* }' V" P; n* R$ H# S/ cdev tun  
+ N) i( n. l$ I4 L$ Z9 x  W% |2 m
# E5 A1 ~0 `# ~; {7 v5 I5 F# ca证书路径: y" z% a! Z% P  M+ a- @+ j
ca /etc/openvpn/ca.crt  ( l6 m5 w. n# i; M1 Z. t! E1 ?, Z5 G
+ ?5 a( {4 {" b0 r2 G/ ]
# 服务器证书6 A; O' E$ C4 k
cert /etc/openvpn/server.crt  $ m6 F2 v+ }% M# @

; r8 H' w4 x. H# This file should be kept secret 服务器秘钥
" C8 g( {0 j1 ~7 W& U# b/ xkey /etc/openvpn/server.key  * r/ i# T" ^5 A% e, S

7 L1 X# I6 \/ J1 E: T3 v# 密钥交换协议文件0 s9 {# n: s" O$ o2 O; F4 w  ^
dh /etc/openvpn/dh.pem  5 F! \7 g- o( _- j" o6 K! F% I

4 d/ T0 }! J1 c; J  t. G# VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。注意:该网段地址池不要和已有网段冲突或重复8 n  q- n& O/ S) ~% g
server 10.8.0.0 255.255.255.0  + d( m: ?- I3 @& Y5 v9 j, ~- P

& s! [3 m5 }  g% ]  n3 [#使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思
2 D, H: j0 o$ l) d1 l; Oifconfig-pool-persist ipp.txt
3 z. R1 u1 c& E& p. Z; ?/ z, V
0 ?  z: v* T; E0 ^+ d# 客户端所有流量都通过 openvpn 转发,类似于代理
/ Q% `6 r8 U% R9 g. V' O/ Lpush "redirect-gateway def1 bypass-dhcp"
% t. a% N, k9 Q) ~
  i3 O9 ]- B5 a. P6 v1 u# 注意:客户端配置,当服务端开启上面一条流量转发后,客户端需要配置如下2条,客户端只有访问192.168.0.0/24的地址才会走vpn隧道,也就是会使用vpn服务端的IP地址,访问其他地址还是会走本地网络
: J2 Z+ Z( a8 G" B! [route-nopull1 ~" k8 M& w$ p3 V1 s& I! }4 P
route 192.168.0.0 255.255.255.0 vpn_gateway
/ i; j4 E! o/ X/ i+ K  r * A7 L$ `  Z4 t/ _' {1 j% r
# 将服务器端的内网地址推给客户端,添加到客户端的路由表中,可以添加多条( b- @* E1 i& J. U( H' F
push "route 192.168.0.0 255.255.255.0"
: w& I: Q) n8 O- Q3 h' k
0 p7 b( e, ]2 u- O. C# 服务端推送客户端dhcp分配dns0 ?: h$ j9 p- I8 P# r$ V* @
push "dhcp-option DNS 8.8.8.8"  3 p9 g* Y, U' h& |4 W' p. e
3 D: g* [4 Y: U$ o' A8 c
# 客户端之间互相通信
& I/ i7 X% i( M  Xclient-to-client
- S( g/ O) J9 O: M. C2 T4 k6 ~; v! o 5 S- Q8 ^& s" g# X* C  g( `
# 存活时间,10秒ping一次,120 如未收到响应则视为断线' c7 A" _- t( }# S
keepalive 10 120 1 ?% d( t3 X' t/ F- X, c

/ W( M& U2 _8 s# openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令8 d$ K3 \2 o2 _) a- l9 G! A
compress lz4-v21 A+ f; f; i+ y; s% x
push "compress lz4-v2") v4 R" l8 ~* ~: A2 u" H. G
- x2 p/ E4 O5 b! r, I5 ?  ?! \
# 启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置$ X2 F5 N# K) s4 @% |" x
comp-lzo
4 {2 a/ V- _( I! |7 q 4 e! m9 b2 J$ h% q8 W+ `  ?
# 最多允许 100 客户端连接! a& a+ H" S8 C: P' n/ k
max-clients 100  
* y. r% ?9 Y. H
) X/ j9 \7 D7 ]# 用户
7 a$ n; t- [, a8 ~" @+ Y/ Juser openvpn  
1 a* c2 n6 I; t1 T. _ ! [1 j4 N6 ?# Q' Q- N
# 用户组  
: m4 h& s. L5 V( R. B& x6 \/ C5 zgroup openvpn  ( l0 h- _3 }& W+ `/ o( _

9 t' N  I# B" p# 参数 0 可以省略,如果不省略,那么客户端配置相应的参数该配成 1;如果省略,那么客户端不需要 tls-auth 配置! W3 ^3 I- N8 ~  t
tls-auth /etc/openvpn/server/ta.key 0  
  N8 B1 v. u7 ^" A! q' C1 ~ 7 D: i& v) P2 S
# 设置一个证书多人同时登陆,如果不允许则注释掉
0 r! a! [6 F* k3 v4 Y$ a" Rduplicate-cn( B9 |" @" T9 |3 v7 V7 C

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:34:17 | 显示全部楼层
最好的办法是禁止OpenVPN设置自定义缓冲区大小。在服务器和客户端的配置文件加入:# g$ `0 H/ _) j  H1 P% m3 K
( A; U) m# o6 U: O( J! _! R3 k4 I& u
sndbuf 05 l- E( i  y) @2 ^: n
rcvbuf 08 o: F0 ?/ h! r  t) T
/ Q1 C) [8 U! P( L$ `7 ?# Z. P

9 \6 ^! ?: B; I这样缓冲区大小就由操作系统控制了。对于Linux,这个固定值对于TCP是net.ipv4.tcp_rmem 和net.ipv4.tcp_wmem, UDP是net.core.rmem_default 和 net.core.wmem_default 两个值除2.
9 ]& I- ]% j% O
' o% D+ N* ~6 z) P( Z如果客户端配置文件不能修改,那么你需要从服务器推送更大的缓存大小:
8 T5 {3 G* o- \8 ~6 _' [1 k5 L' @6 \) q, m$ Z
sndbuf 0
7 v+ C) M: a' U! V7 F( n: w2 ercvbuf 0
" o3 U$ `, r" `& @. R. [push "sndbuf 393216"
/ H1 M3 Z/ Q) a. B' {push "rcvbuf 393216”% |/ R& y0 \5 R' F
! T4 m" D" k$ O6 T

- q( a9 {# l6 c' n2 _UDP和TCP不同,没有窗口大小这一说,虽然不是整个系统都需要。但是缓冲区过小也有可能降低速度。如果你把缓冲区调成0后还是慢,你应该要么在系统层面增加缓冲区大小(net.core.rmem_default 和 net.core.wmem_default),或者在服务器推送更大的缓冲区配置:+ ?: ?' t& V7 d' E0 p2 v: U' L

4 Y  O0 \+ T% L5 ~( {+ o3 Ksndbuf 3932160 a. {5 H! C- ]' M
rcvbuf 393216( ?: C% ~# N+ X9 u4 x0 ^& L
push "sndbuf 393216"
. d1 o* m& m: mpush "rcvbuf 393216”
6 c; e5 i* N5 y6 P

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:04:47 | 显示全部楼层
6 p* T! S3 o$ m
这部要做:
+ Y$ l$ d7 I) I) C, v/ v- ~firewall-cmd --permanent --add-service openvpn" C1 P' n0 |0 Z, K( u, E
firewall-cmd --permanent --add-masquerade- z0 a7 ~6 [4 W5 e3 w
firewall-cmd --reload
. @5 p* S8 a, w# E! z$ V
# E# H6 t1 n8 \3 ]' c8 ^& x/ q( p  z6 u+ f
优化后的配置:
2 W. [# D; A) p; k! F) ~4 O" c
1 c7 Y+ m) w% ~. C0 U1 m
$ M3 H% _' n. f2 L服务端配置 (server.conf)
3 c, H+ b2 }& W7 K* B6 F0 M% \# 基本设置
& i2 }! o+ T0 ylocal 0.0.0.0/ ~! h# }5 X: ^4 U, M
port 21977 ?1 C$ h0 ^* u
proto tcp
# S$ J) W) F( b6 v( b  hdev tun
3 V+ I/ N/ K& f3 v( @& Ztopology subnet( ~% }  z' ]/ i2 X: ?1 t
: R2 ]5 }/ P, H/ }/ j
: }4 d7 `0 g3 V/ b
# MTU/MSSfix 优化,避免 TCP-over-TCP 卡顿和重连
' j# n% p( b" {# ~4 Ktun-mtu 1450& W# _' |6 J/ ?3 l' K9 T1 _
mssfix 1410
6 D: A0 C& _0 @- ypush "tun-mtu 1450"
8 Q$ U6 B. s5 o" M4 W& ]; M5 i* T' {push "mssfix 1410": b% E* c! A5 z6 i

$ o: a  z" H. M- }: w

9 \5 W) C# p: ?& K* x, u; J& M# 证书路径( N# n+ g& Y& w. Q" M0 a
ca /etc/openvpn/certificate/ca.crt; P! o3 x' ]% X3 L& j2 v% O9 A+ A
cert /etc/openvpn/certificate/openvpnserver.crt
0 c' r1 Z( _. W0 ]+ Ikey /etc/openvpn/certificate/openvpnserver.key9 h3 f# U1 ]. Q# B$ G) |& M
dh /etc/openvpn/certificate/dh.pem# @# a  x, y3 |) L& j
tls-auth /etc/openvpn/certificate/ta.key 0
- e* l" X1 N5 v: [" Z* P) mtls-server/ T2 s: h4 I6 j0 O
8 D, ]$ e. N" b3 b
( B. z% O5 ^: T& D/ U2 U- }
# VPN 内网网段$ U$ ^3 y. b6 a1 y( _
server 10.10.10.0 255.255.255.0+ z1 o3 l5 |9 |9 w
ifconfig-pool-persist /var/log/openvpn/ipp.txt. O6 S; `  d7 z7 }$ c: n. l

4 P5 F# L! D# _8 x; o/ v

% \( p( l$ w& R) G# 内网路由推送0 T7 q( F; e$ `; d5 t! Z
push "route 192.168.16.0 255.255.252.0"/ g" x- l7 v5 ?7 `$ [9 O+ ?1 o
push "route 172.30.1.0 255.255.252.0"
; S& z2 V6 Y$ x. V% c1 b0 z: B3 O( O  h  _) |

/ N2 B: i4 u3 w, P( Q) n# DNS 推送4 X0 P% |; J# [+ v  \
push "dhcp-option DNS 119.6.6.6"
; Q' H  q( C6 f2 x  vpush "dhcp-option DNS 119.7.7.7"
; f2 O, X$ u5 {; b" o; q4 U3 _0 {2 p: C$ ^$ I+ H: y

0 \9 F; J, O6 W# U! M: i2 d# 客户端互通
6 H8 x8 W$ p+ ]1 u9 L, Gclient-to-client
" u& k* U  d9 |$ ], N: F3 f6 [9 ~+ M1 m4 N
7 w- U  `$ K- b4 C; k' w
# 保持连接,优化 TCP
" h2 L/ c7 n" B/ `% J: C9 ]9 `keepalive 10 60
6 z% @+ r$ X8 @4 dtcp-nodelay
, Z4 y! ?# z$ a3 h* Q) A
' o4 c+ X2 k7 v- C$ F* L1 X

2 X# F. w7 v% x9 s9 f$ c# 加密和压缩, B8 }. S8 r$ t5 h. ]& r1 {1 o
cipher AES-256-GCM
1 D, R( }! l. B* Zauth SHA256  ?% [5 C$ [8 Y- y1 p) I
compress lz4-v2
: n( a1 U; h) u5 D1 \! b! G& {push "compress lz4-v2"
& C# v8 {* c4 H' a
/ v$ b, ?9 ]8 h, N9 ?
1 `7 N, _8 d, S. f
# 客户端数量
5 y0 S' P* V! C9 t" x) K7 |max-clients 250
! i' j4 t6 R8 e) b, Bduplicate-cn   # 如果允许同证书多端连接! r% u( S$ }, |+ A

& C; P9 f( t! e9 \! g( |
* T% U0 X6 d! x: ?/ G" ?
# 用户权限  ~# H5 z# Y* h, t; U# I) X
user openvpn( ^# W( F  j) U- f1 M0 Z8 z* {
group openvpn% s3 v5 A/ [0 B$ ^
persist-key
- g% ~! y+ Y( e* L" q' D  A$ l% Wpersist-tun$ D: Z+ U$ i+ ^; h

4 T) r7 Q) @9 C/ i2 U! ]+ `

5 z/ S% J/ y' E* o7 x# 日志4 T2 `4 V, p+ _) ]
status /var/log/openvpn/openvpn-status.log
$ E7 c5 K" [( F; k. n9 ilog-append /var/log/openvpn/openvpn.log/ u! j- E4 Z6 W. `
verb 3+ G- ?2 f1 g8 O  @" p: h
' w! w- {3 j' h7 i
* V: K' _+ n9 Y
客户端配置 (client.ovpn)
7 T; k6 [8 u! i# @$ |# ~' eclient) r, s' s& }; r+ L7 n  E0 N4 A
dev tun
* e: w1 A! a; N8 g4 e* `* R/ Pproto tcp. e' h  r$ g: ^8 ?
remote 119.99.99.9 2197
/ n$ ]9 i. }) `# _2 B# ?) jresolv-retry infinite
) B; y; S9 F4 U& @0 `9 k5 ?( Xnobind- Z& h; q3 U0 j4 D$ d& b! q
remote-cert-tls server
7 W6 T  O( |8 @& G/ b0 ~: P  m, ^1 c" U5 N
$ Y, H8 W, Y; k, z0 n
# 证书$ P5 G0 L8 @" t. N  B
ca ca.crt
$ I5 q/ [" A4 u" Qcert rui.crt! o6 O, b- S# ^4 @" R! S9 q
key rui.key
0 ~4 O" R: L! u5 y) ]: l6 Qtls-auth ta.key 1
, n% G% w* v9 t" y# \( q# o$ ^- J4 N; n9 a1 t  i! i

5 O9 q" A2 y1 i7 e# k+ v8 F: D# MTU/MSSfix 同服务端
4 z: B9 o0 \2 `- \) R* Dtun-mtu 14501 O) W7 h9 }! r9 {7 ?$ u9 z
mssfix 1410# P  `! L' {6 }' o8 K

8 ?7 g9 h- W! N; t, l5 N+ s( `
7 R& q2 k% L0 y# C( E& D
# 加密/压缩一致
( l/ u5 ~- u, ?9 g- U' |* c! U5 [cipher AES-256-GCM
, M* ?4 V( C" `" E( u% Z) N8 Oauth SHA256
( A% _; n( u4 W5 W* Z, `8 ucompress lz4-v2
9 v, _/ E+ J4 N& O5 }" o9 B# [& ], s' z0 {6 j9 }
$ O  d3 l/ H/ g9 ^. b* K! A9 ?2 d% R
# DNS
4 p6 J8 B8 E* u" adhcp-option DNS 119.6.6.6* ^1 X6 b) |* d- M$ r8 x. }  u) e
dhcp-option DNS 119.7.7.7
; K" b/ V8 Z% P9 F  D# m* `. t, i# \1 q3 Q
8 E1 I) a# C2 F' {" N  x$ w# }
# 自动重连优化3 k. R/ S, R7 u* y7 f
keepalive 10 60
5 l! s$ d- N  \2 i! ?persist-key; s7 q% _  j7 a' i/ q
persist-tun
$ q1 X, O1 R0 L7 {4 O( Iremote-random- X' `2 G- f+ a" ^- e1 O. D
tcp-nodelay
" E5 P0 T! B, K) x1 qresolv-retry infinite/ E( v# s2 x6 s9 P' [: R/ c3 X% o
3 Y, B' w% G% H4 N6 Q* O
7 H! }. v9 w' w5 v3 l
# 日志和调试
, p# Q9 F1 ~( D8 p6 K! E* Kverb 3' E$ ?; m* G2 ~. A4 f4 |) c2 z0 Q2 m
) o8 z9 j8 _8 c3 y/ o; j

% z1 @8 b4 q$ G( X* \* f, [

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:09:01 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
4 o/ C* b) b/ h9 ^% j
' \0 ?7 r5 Y+ b) j) n代码语言:javascript代码运行次数:02 \! ~& W! A1 e2 K4 p& A
运行
9 Q% t/ J* [) Q7 \AI代码解释
: m8 p1 @+ D1 C" u7 ^! s  z! Yyum -y update
' S, S: _- v8 O' ]. t/ C虽然也是可以不进行更新直接安装。
4 V; G% G" M" s& D! ]% g4 \0 ~. J/ K& D" p1 L- M7 I
安装 OpenVPN 和 EasyRSA" u* ?* \! c% {" i
. n0 x% I+ v$ I/ T& v6 t  \' ?
安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
* ~- P# G( a6 ^$ D6 P0 n& @; o& E9 n+ ?) v& O) v4 \9 C! b: M
代码语言:javascript代码运行次数:0
3 h& C: `- C6 Z; B运行
( @7 d; e% X8 ]/ }  H; y8 k9 IAI代码解释% l& p8 ?0 L1 {. e- [
yum -y install openvpn easy-rsa firewalld( ^( X8 G9 K8 b' u' S0 `
如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。  D& i( {. c% I$ Q
( g$ R4 V: w8 t) D
代码语言:javascript代码运行次数:05 w' K: L( ~; h& k1 \! }
运行
6 T0 Z! M, D: pAI代码解释
0 H; z7 C1 A% b, Ayum install epel-release -y' S# O6 H( d, a
生成 CA 证书、服务端密钥与共享密钥" @/ K; {6 u, `; U3 A$ ?' `- z5 a
/ u3 G; @* {3 [7 e$ u
这里步骤比较多。$ L. C- K  {# h; P5 Y; w' @" E
0 J+ F. n: z9 D
首先需要初始化 PKI
- E  z; S+ L: ?5 ^! Q# l) y
3 V! t7 P6 ^! c; {- x& T代码语言:javascript代码运行次数:0" N# p6 h- o' u) I, e: ?9 h" e
运行1 z# a1 h- M! P! j$ c/ [! g
AI代码解释7 j% v4 N- ~# a5 R1 L
cd ~
! c' @. \  w( Q6 r) H/usr/share/easy-rsa/3/easyrsa init-pki0 z0 C/ S0 |. t& G$ n  s- }
接下来是生成 CA 证书' V* e4 f1 x9 O+ o: _. ?/ H

" V* A3 I8 i4 a9 Z" O代码语言:javascript代码运行次数:0
8 V! `1 F$ {  B1 D运行
6 g1 H: J8 v0 L; ~" ~AI代码解释
* q0 e& C5 S0 o( X7 d/usr/share/easy-rsa/3/easyrsa build-ca nopass
3 c5 [+ \- ?/ E其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。* E; K+ n# L) ?

0 @+ e8 k& ~5 f6 W9 S+ ?, N再来是生成交互密钥
# f" o" z5 w- ]2 _' p. x" v9 b' m3 T6 i: T+ ^% K
代码语言:javascript代码运行次数:0
+ M7 f3 \6 n0 ~, M" i7 N9 W, E3 ?运行3 i$ ~( q! i, b& {/ y) N
AI代码解释
$ P% ?4 d! D( ?/ ]6 X/usr/share/easy-rsa/3/easyrsa gen-dh3 P; ~, p5 H1 s
开始生成服务端密钥
* W8 @1 H3 J4 K9 A8 ]  P6 M) g: N, Y! w. v
代码语言:javascript代码运行次数:00 e# P8 M; b( o3 h6 g9 Z
运行+ ~+ \1 E5 n8 a/ H
AI代码解释( y3 ^" H0 r2 P
/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass
: `. {+ ]: l& I4 K! [0 V接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥7 P* h) \" C, g' h( [3 ]: L* [

4 J) M9 D; j- D1 L0 O, w代码语言:javascript代码运行次数:0
' \8 p/ @* }) B" O1 Z% S" l, ~运行
, W7 S' W; l4 B$ C$ b+ W/ F( i0 DAI代码解释
8 x/ z9 k3 z. e6 E" |/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass
6 v+ E+ E/ \: D) W7 \: v8 f最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过& C/ _( Y. T4 L  N; `" `9 g  e, F

! n; x: V+ K) o: y4 |: @1 s# ~代码语言:javascript代码运行次数:0
' z4 P: ?% d. }( p+ D运行* {7 G) }* ]  g
AI代码解释
, q$ N1 N8 ]! K- d/usr/share/easy-rsa/3/easyrsa gen-crl
# _  X) }# t2 X其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥) f5 z4 I0 \( n1 _& w) V
) j) i. q- v! |1 Y, ]9 }8 h/ U
代码语言:javascript代码运行次数:0
% {7 W8 ^* |9 n运行
6 r7 ]8 L0 L6 |5 w" R( `4 AAI代码解释  [' t$ _, l9 k8 C# S$ M
openvpn --genkey --secret pki/ta.key
9 J: S" \! z7 \/ n. V9 z! n( d& L在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)
$ a' z* J/ J3 A, H1 I: a- V5 A* m; B) U7 N% N7 J
代码语言:javascript代码运行次数:0
5 P; l3 D2 c3 W1 d# n. P运行
1 ]; v. W  K. m0 `AI代码解释
7 f4 Y! S1 t4 O2 G, Hcp pki/ca.crt /etc/openvpn/ca.crt( _, {% {2 z& e$ o
cp pki/dh.pem /etc/openvpn/dh.pem
- X& m- }: l( e, _0 scp pki/issued/vpn-server.crt /etc/openvpn/server.crt& u: ]) e$ Q* ^
cp pki/private/vpn-server.key /etc/openvpn/server.key9 L9 Y- X0 }9 N: i' w" o, ]  _
cp pki/ta.key /etc/openvpn/ta.key
5 B3 c: [% K8 p3 G8 zcp pki/crl.pem /etc/openvpn/crl.pem- t' Y( A4 h) u2 C2 J4 W$ y' n
配置服务端. J" S' Z' W$ m  |% V' T4 S
! ?0 N/ h& ?, P; L0 C  {
OpenVPN 配置文件有许多可定制化,具体请查阅官方文档。- _* |( U9 e* d
* P9 u$ l- _# t! v" a+ [
代码语言:javascript代码运行次数:0
' w, ]- `# T! e3 v/ [! i运行
: ?% F4 n: p4 z9 q/ \" @8 mAI代码解释
0 w5 L  s: n1 T6 [1 \# |3 \9 hcd /etc/openvpn4 x, m. E1 w, @. a
vim server.conf% V9 ^. l! G: `4 d8 i9 l
将以下内容粘贴进去" v! x& H! G$ v/ S

6 Y+ G* H: P% ^4 F代码语言:javascript代码运行次数:0: ^+ L' d/ ^8 l5 O! q
运行
0 R1 ^0 R# N) o# m! ?* j7 L4 IAI代码解释8 J' B- K5 i/ y1 ^' Z% E
# Secure OpenVPN Server Config
' h$ M, [, F3 P# k  _- @3 {# Basic Connection Config
' u" ]8 A" @  a* ]# e8 [dev tun
, s4 a& X1 s  I! nproto udp. d* C) g1 V; ~. w, e% @; d
port 1194. \& Z, M3 h$ W0 I2 C
keepalive 10 1201 ~8 K6 F8 _# L3 F( [4 A1 t
max-clients 5
# E: c) j8 a# V# Certs
' A" n! S2 F( o# F' T  g, jca ca.crt
4 V. Q8 k& {- u/ gcert server.crt! |$ a# p$ X) Y# C
key server.key
# N' L) f) T8 a9 E( k0 b0 tdh dh.pem1 P  r6 V8 |2 \
tls-auth ta.key 0: ?( p/ y( ]0 R! G0 f1 M  K* e$ n$ D
# Ciphers and Hardening; x5 E: ?2 X; L
reneg-sec 0# h! p. E6 w  o- D$ q: G8 J! o
remote-cert-tls client
. h) c( G# H3 P3 p! c% Qcrl-verify crl.pem
6 h4 {9 b9 L' Y7 f: A+ W9 wtls-version-min 1.2% |* D) Y1 A; X1 |8 r# t: F
cipher AES-256-CBC
9 s7 B' x( h$ u& T" Y7 J' Wauth SHA5121 D2 B, }$ z# \6 c
tls-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% s/ G  F3 D# Drop Privs
- X1 T+ M5 c% N1 q0 }user nobody
! j) S! |5 U( j  Pgroup nobody+ q4 A: d' N8 g/ _. u, O' u( @& w
# IP pool0 y- d1 b/ D# ~8 r( I# Z2 e7 k
server 172.31.100.0 255.255.255.0! O& |0 [" r8 M0 y: S* X" {
topology subnet4 U' I  Z' R, H
ifconfig-pool-persist ipp.txt1 q$ h( S9 w' t/ E- n
client-config-dir client
) v2 Q% `" z- ]5 s6 Y9 f# Misc- C8 d8 p0 B% f' j: t( k0 h
persist-key4 c6 O2 _( }5 b) o" ?1 B
persist-tun
2 ]9 [4 p( \* L0 s8 W; Icomp-lzo8 H  b2 u( c. h$ g& z7 H4 K
# DHCP Push options force all traffic through VPN and sets DNS servers
& D4 g! \9 D& {: O2 E; \2 vpush "redirect-gateway def1 bypass-dhcp"
8 F; G- [0 b% }0 @/ s) Dpush "dhcp-option DNS 8.8.8.8"
# P& ~+ m# H3 y0 v* p0 Ypush "dhcp-option DNS 8.8.4.4"
, o2 n4 n( d1 o- O0 T# Logging: o& b" Z3 ?# _
log-append /var/log/openvpn.log
! [0 S! @' Q. u2 i# I8 Q: yverb 3' L2 ?" K3 j; F0 p& f
启动服务端并让其开机自动启动
' _9 k2 \  U0 u. k
% R3 e8 U4 J) m+ S+ `2 J代码语言:javascript代码运行次数:0
( \% r# E" E3 J* R% c4 x% i运行. }( p/ [# C& F! f. s. G" o) V% Q) `  [
AI代码解释# Y$ o4 h6 T, {- L1 R) m( T1 Z
systemctl start openvpn@server
; t- o& w8 P" W4 A/ Gsystemctl enable openvpn@server( V; g% s9 O% G
配置防火墙与流量转发- L5 _2 h( ~, u9 x5 S, E
1 s9 |2 Y4 V  Q2 K, ~# A% L
放行 OpenVPN 入网流量与开启 IP 伪装3 t, m9 s  D! a/ S# z
, c; Q  _* j1 g2 V* x
代码语言:javascript代码运行次数:0
' @! I1 H' @5 P7 a4 v; j运行) q7 }3 C" E7 _# F- c
AI代码解释
& @9 U  A) _* n. nfirewall-cmd --permanent --add-service openvpn
6 L# {2 @2 C9 |& _1 lfirewall-cmd --permanent --add-masquerade
2 _- j0 _* e! C8 }2 cfirewall-cmd --reload
5 f) u4 E, S, X检查是否开启流量转发
  }! D, r! z$ i; S3 h8 p0 h# ]7 g6 [
& q2 |% p, T- T# n( m8 {7 F5 I代码语言:javascript代码运行次数:03 i8 c" L+ C* `1 r* m% A( T1 @
运行
/ w$ g& l9 g9 `AI代码解释
: A- W. c$ M6 Wsysctl -a | grep net.ipv4.ip_forward
+ I2 B' T" B; v6 `2 a/ d( X$ a确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下
# `2 U# z0 U5 z: B3 a7 \) M# N0 ]
代码语言:javascript代码运行次数:0/ D2 ?% o1 n/ I+ v: {
运行% q7 \' \- R( u9 _! x
AI代码解释
6 Y5 @4 @7 r# k8 ?3 `: \echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf& w7 z3 Y" ]" T1 p  ~
sysctl -p7 x' u+ I1 A7 N6 \6 C
配置客户端: p  @# N- _" N, ]$ A; w- ]8 Q
. J; [4 K) `1 K( N. k% X" d! y4 {
客户端需要拷贝以下文件
  T% c  U; b( F, u) X" i3 u) P( O4 L- V# l: w2 \' k" K( |
代码语言:javascript代码运行次数:0% g# Q1 z5 B$ j: `$ T9 Z, g$ j
运行
2 a# ?+ _" K6 Y* dAI代码解释2 O8 l  B. S0 W$ l1 p4 e4 W
cd ~
/ h+ x# U3 P( m) C# umkdir vpn-client-01-config
8 z7 E5 w2 f4 ]. d  ccp pki/ca.crt vpn-client-01-config/ca.crt
) v9 ]$ R) U# o* ]* ?( h* ~cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt9 O, {' k5 a/ f) K: j7 F+ D4 U* [
cp pki/private/vpn-client-01.key vpn-client-01-config/client.key
" F8 _$ S' e5 ~" i9 }! ]1 F8 m- Wcp pki/ta.key vpn-client-01-config/ta.key0 O& }2 c; n) A) ?3 {
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容6 t1 b- S, N# M9 e

, G7 ~. R8 G! L9 }代码语言:javascript代码运行次数:0# `2 x8 q2 O* }! L
运行( x. ~' P, O2 M! o
AI代码解释
" n. Y( k8 b9 E6 |7 g, R# Secure OpenVPN Client Config
4 C2 H+ B1 S; N5 ~3 c) V#viscosity dns full
# n6 e/ U; ?2 B* m& s8 c) Z- {: k#viscosity usepeerdns true8 Q5 B2 d2 Z: w; r8 w
#viscosity dhcp true
5 {/ E: f; f- h3 e+ ntls-client
; ?. N) n* I" ^+ e2 dpull( x, G" d3 U1 o$ M- h# L6 b
client. D: S+ M2 |$ B
dev tun
! R# ^/ F3 r9 Xproto udp
) h5 ~' A! R( ^- Q) @* premote 123.123.123.123 1194
! `4 n! z0 U' `% t5 G1 p5 oredirect-gateway def1/ v. T9 h) e/ O4 e" w
nobind
* P% H' m0 v. f2 T: F  h" t$ hpersist-key
/ H/ T7 g7 U/ Apersist-tun3 `$ n7 z9 p/ p7 m5 l. {
comp-lzo. U1 X4 C) O$ t" i
verb 3
' C/ c* k0 A  Jca ca.crt
' Z7 v. n  u& h( f! `% hcert client.crt
7 |  m, e3 j5 c: S3 Ikey client.key
! ^6 r$ O& [+ d9 x# P- x+ ~; a2 [tls-auth ta.key 1" g+ e* g% \, B+ ^. m% V% }
remote-cert-tls server3 q! y  N% S# X' v8 y# r; J) i
ns-cert-type server5 V* E1 k7 l. ~! M! u, A
key-direction 1& D. i7 a  l0 P0 ~# R& y* w
cipher AES-256-CBC
+ s1 u0 R; H2 y) ltls-version-min 1.2
% X  H3 @/ F/ O% x1 c0 V3 O+ Tauth SHA512
7 G8 Q1 @2 x) U3 Q2 e& rtls-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( s1 Y8 _9 p& f6 K

# K6 k5 s; v: ?% e/ _: d2 L$ yremote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。
/ r* w  `/ h. G* B( A8 j

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-6 23:24:01 | 显示全部楼层
调整压缩设置:启用压缩可以减少数据量,但可能会增加 CPU 的使用率。在配置文件中,你可以启用 LZO 压缩:: w$ h2 C) c# G3 b3 X
$ b( x9 ^  p) I5 N% _8 j- b
comp-lzo

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-16 14:23:56 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
; s+ S- a, ^  G5 S  c1 [
" p! A& x3 U3 e, q! }1 O/ i代码语言:javascript代码运行次数:0
& o+ u. Y8 }: \, x; J运行
! c# L! t4 x$ [AI代码解释
' @- |4 q6 l. _/ V% m# \, h9 d3 qyum -y update6 J) w: i3 P$ U: g0 Y
虽然也是可以不进行更新直接安装。  v* R+ j3 u+ U6 a5 c3 E( B
6 v4 ]8 K" R) T, d4 o- j
安装 OpenVPN 和 EasyRSA4 K/ j5 h3 S4 F0 a  r% @7 G

- c6 e3 w8 B- I安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
% m  q; K; b" s! E  Y3 }% |% {/ e0 p* H, r3 w; Y4 c3 v* I5 [5 B
代码语言:javascript代码运行次数:0
  y/ t+ C3 L4 {& }* ]运行
# L4 y6 |$ d! y5 z+ LAI代码解释, w9 b3 A% y2 \! \) Z
yum -y install openvpn easy-rsa firewalld
; X  E  Z9 M7 \6 y! M7 z3 f( w如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
9 G" N4 K: _  g7 p  ?, E( h7 Q5 p' P2 f' ~, i' Y  C5 r
代码语言:javascript代码运行次数:0
! p; ?" B5 V2 x0 i2 f+ p$ \运行
2 Z* d! i; D! p8 H, fAI代码解释4 y6 e, S1 V( _$ m2 `6 d, K
yum install epel-release -y# k% w+ A+ t# O3 D3 {
生成 CA 证书、服务端密钥与共享密钥) `* g3 ?3 n4 u- W

; v  n2 R( Z& X. B) q9 @- Z3 j这里步骤比较多。2 F+ t5 P! H: u' H% C
( \' E6 L8 v) z; F- Z( N: `
首先需要初始化 PKI
& t+ t) x4 A: u% j; ^; z$ n5 n( j" Y0 u1 z
代码语言:javascript代码运行次数:0+ r- }" k4 Q/ j" e
运行
, y4 F& c9 `0 E% f) Y+ vAI代码解释( L6 O  b& t2 |/ `* `* `; L% v' Z
cd ~
& |0 w+ u& l# N) z/usr/share/easy-rsa/3/easyrsa init-pki
- b7 V: i+ _; g% [9 X接下来是生成 CA 证书
% c- A  ]' G' h6 F8 ^$ b* B4 T
; `" Q4 L/ i2 \9 q代码语言:javascript代码运行次数:05 _* Y; _7 ^3 |1 ?3 a& A! y- ^
运行
- V# `1 V& O$ K, e! l8 BAI代码解释& }( g8 t, c/ L8 Q" E! Y
/usr/share/easy-rsa/3/easyrsa build-ca nopass
! m$ M9 ^' ^0 U2 K( I4 j其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。
7 n0 o% C% W& F6 K; G8 I. Q
5 s$ M. K% E! H# C7 I再来是生成交互密钥/ B, @5 Y4 t$ W  n- P
5 z, r1 f- T" P% z: |5 T) U2 Z- P
代码语言:javascript代码运行次数:0
6 y% z) P. U) z0 Z" {运行/ r/ C3 y8 {: T7 N$ Y  J
AI代码解释
$ F4 G) z; Q8 \, X& D/usr/share/easy-rsa/3/easyrsa gen-dh
$ S) c( T3 `3 G- ^$ r( j开始生成服务端密钥, O- W4 d" D, n
& U" P/ f9 q: c6 b6 o# `: @
代码语言:javascript代码运行次数:0
3 u. ~; u4 B) K6 B6 n8 t运行9 t- y& f% O( U
AI代码解释( v3 m! }2 n; h" [+ |) H
/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass  v  w- L, f% g. H* m
接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥( K, z" p5 h3 J' [  @4 p: g% O
- H$ h  v5 H' a! ~2 S3 o
代码语言:javascript代码运行次数:0
0 r9 [6 e% z9 s运行: B1 R/ D' x/ ?5 L# f0 |
AI代码解释6 e2 Y' c4 m, g
/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass+ i' u1 X; S' x" P& P- G" @
最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过" q  w  |+ o/ W

2 {9 z: ^7 p0 X) d# r* \代码语言:javascript代码运行次数:09 x6 d3 q- W8 U. `# l4 i7 `! z* G
运行* c* Q! C2 f% F. m& h0 d( n$ e. m
AI代码解释# P1 A- p7 n- U/ r! g
/usr/share/easy-rsa/3/easyrsa gen-crl
- |3 ?: C7 [* B+ z. {其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥
  {6 I* O+ y9 V7 g7 U
7 d3 E/ d, ^  g: S1 u代码语言:javascript代码运行次数:07 f' R% x, ^( R
运行3 Z$ a+ R8 N' O& r9 N, g
AI代码解释! F: M* v" K1 i: [. S' x+ A+ E% E
openvpn --genkey --secret pki/ta.key8 s4 f+ V6 C& i& I6 k2 t
在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)! K* p4 o) F/ j+ ^) D

; ^) o; X! ]# ]9 k- h% _代码语言:javascript代码运行次数:0
1 V6 f5 G; q2 S; P: P* T, w( p' Z" \# d运行
" ~! ~6 M: o9 NAI代码解释
1 A2 C8 G, Y  \( {) j5 Q) w8 Ucp pki/ca.crt /etc/openvpn/ca.crt0 Q9 f" w8 d9 J  ~! P! z) l  t
cp pki/dh.pem /etc/openvpn/dh.pem
$ O$ G2 ~& c2 w6 [! L, _cp pki/issued/vpn-server.crt /etc/openvpn/server.crt
  I  @; ?+ D( x4 T0 H. ^cp pki/private/vpn-server.key /etc/openvpn/server.key
+ _# m9 f; d1 E' A$ S1 zcp pki/ta.key /etc/openvpn/ta.key
, _( L5 {1 _2 ocp pki/crl.pem /etc/openvpn/crl.pem- ~& J* K9 c8 f' k0 B6 L% P
配置服务端: F3 k0 `! p( Z% Z) a% H
' [' f+ e  T! K" E) ^/ G* @( I8 P% d
OpenVPN 配置文件有许多可定制化,具体请查阅官方文档。
2 p4 m2 e1 z- @8 Q* h. R1 E% R5 N) ~
代码语言:javascript代码运行次数:01 |) _8 M# }0 Z
运行
% f& {+ v- z$ C8 {) i  F& eAI代码解释% C! J  l! Q% U/ V  `
cd /etc/openvpn( x) C, R! M1 s* D6 n
vim server.conf
- v8 X. Z- V( c* C! b% @% i! f将以下内容粘贴进去. X- O6 _( d; w9 q$ f1 ?2 n( i, B, o% s

; u6 Z, E3 g7 h& N, x代码语言:javascript代码运行次数:0( t2 h. f9 |6 [# s+ ?9 D$ v& D
运行
+ k# Z; b$ S' e9 l1 @! u7 |, ZAI代码解释
4 e1 M" r& H7 U# Secure OpenVPN Server Config5 x3 \, J4 A4 w! s  U! b' U
# Basic Connection Config
* q9 N0 y" Y+ }dev tun
" ?4 ]' B4 Z* O: m3 fproto udp5 v) K# K- z& Y# V
port 1194- f5 _. y  j; r
keepalive 10 120  ~0 p3 O5 G) o# G
max-clients 5
" I% y' d0 _3 _$ z6 r# H, @, F# Certs
* g# h9 U7 }0 Yca ca.crt
9 Y4 g' m' P/ z; c  N) pcert server.crt
# j. k( u; V4 {1 w5 ]& Jkey server.key1 [: v% g* Z# Z; X7 c
dh dh.pem% [* i5 u; x- |- O- k) v
tls-auth ta.key 03 }- P) `. X5 j0 f1 N1 |
# Ciphers and Hardening
2 K' ^: }- E' w: b6 U% c' ?reneg-sec 0' R9 B) q! t, ?
remote-cert-tls client8 R& A: D% v2 F# g
crl-verify crl.pem
% A0 O/ F$ c2 W' itls-version-min 1.2
* ]) t7 O3 Z  A. s5 Z) `cipher AES-256-CBC
" `; f) c( _$ z$ c2 A+ b) lauth SHA512# N. W- `; J0 X: d
tls-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-SHA2569 r4 U, f* x- Q4 {3 L. @" ]$ ~6 ^
# Drop Privs
% I& `! X$ z) z. E* ~2 Yuser nobody
* Z' ^2 j  q! p/ cgroup nobody6 N# u" B3 O! l& y: h% z
# IP pool! T( i- _& s) Q/ E5 O
server 172.31.100.0 255.255.255.0
/ B, t, t' l4 b5 S: V* C; w" Ptopology subnet
- N$ J- P' p5 Difconfig-pool-persist ipp.txt
$ ]7 e; f9 P6 o0 a' Yclient-config-dir client7 z! e3 i% R9 F5 D1 F# j, C
# Misc
/ k/ K2 ^8 U1 S, \$ P% npersist-key
9 c0 m) k, D4 B- q6 h7 b4 ^persist-tun
2 j/ S  r. J! [comp-lzo  n( h! U8 t- x* _: b) E/ O- |
# DHCP Push options force all traffic through VPN and sets DNS servers
8 t3 y- t# k& `5 Y( ]push "redirect-gateway def1 bypass-dhcp"
! \, ]( K0 ~5 N5 g: Cpush "dhcp-option DNS 8.8.8.8"" B- }+ b9 p& _% H
push "dhcp-option DNS 8.8.4.4"+ L# H* L) P) o( E: {: ~2 A9 S6 l
# Logging
; L  @) Z+ B0 H# q: `log-append /var/log/openvpn.log1 u8 S/ k1 I. A, x
verb 3
3 D- Z# O. D' p' {0 G启动服务端并让其开机自动启动* S5 J% q  b$ c; F; q; Q

9 M, }) X- I1 B) k代码语言:javascript代码运行次数:0
) q( c' l# I4 |7 E$ h, j运行
2 M* \& b$ @' UAI代码解释
8 n# }  [" c9 \4 c& c, n* |+ q' fsystemctl start openvpn@server. r: p4 f+ {/ ]
systemctl enable openvpn@server6 a0 l. Q* Q1 ?% m, F  Y0 n( T! a
配置防火墙与流量转发
+ a- S1 J; L9 I! e* a. N; w0 P8 D" J3 k! P2 L1 p3 {! }
放行 OpenVPN 入网流量与开启 IP 伪装' m) ^; x7 O8 _/ V2 n6 b' }- d

9 T* }( G& I4 q代码语言:javascript代码运行次数:0
4 Z# @2 x. k" ^" V: @4 ?9 |% ?, y! t运行
8 ^& f" A4 N9 J* U8 ^' g+ wAI代码解释
/ A$ w2 w& C0 j% W1 J) [+ h/ X# bfirewall-cmd --permanent --add-service openvpn" a: ?" p! i* Y5 k8 x, k0 _
firewall-cmd --permanent --add-masquerade$ A1 B5 ?( T: ^
firewall-cmd --reload8 c# q9 S( L* }( a; r
检查是否开启流量转发
) F0 ~' r) _* [3 ~$ f
( k  p9 v  N/ N" h' B; ~代码语言:javascript代码运行次数:0# b# D8 P# k  F6 U4 o6 F
运行  Q/ Q0 b2 ~& X' t  U1 H
AI代码解释& X1 w% p. N1 q; P, q
sysctl -a | grep net.ipv4.ip_forward& b" ^& `5 R* t
确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下
! e# b, Q3 P# y. u) a3 x" i" K. e9 ]: Z
代码语言:javascript代码运行次数:0
/ Y( o0 g6 H4 m. q: r运行1 r7 h6 c4 Z/ u3 j$ t
AI代码解释
2 _5 |* Z! ^+ p( kecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf" `+ R4 v. S% U0 m; I
sysctl -p
  c4 T7 h; c. d4 J8 |1 B" ^2 M# K+ A! _配置客户端
5 r' L; B0 k0 c7 n. h& _, o+ Q. \6 t; B1 t* q2 d/ r2 P0 l; l
客户端需要拷贝以下文件7 b2 R" t' C( ?

$ S" K8 k( }1 W/ n8 A代码语言:javascript代码运行次数:0" p; n- b3 m1 L- u8 o4 W
运行: w0 a0 E! C, Y  `) h
AI代码解释' t* I9 M5 P( h3 b
cd ~
% {& n( p( c0 Q: J* ?3 q' M  G- Qmkdir vpn-client-01-config
' d$ o1 `' e8 }$ x5 N& N* Bcp pki/ca.crt vpn-client-01-config/ca.crt; Q: ~  h0 J& R: d, K
cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt
  t/ a, z+ M. M0 Ycp pki/private/vpn-client-01.key vpn-client-01-config/client.key# ?: c+ Q& X! R* m% u
cp pki/ta.key vpn-client-01-config/ta.key: v. s1 t# x4 y' U% {3 O; S
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容
3 Y. ^) d8 q; s  d7 a! R0 `2 X2 s# h& v. E/ S$ p4 U8 h/ W* {: D
代码语言:javascript代码运行次数:0
) ^0 O" K& A. D9 ^  ~/ m6 K# d运行
; N& {! Z3 t7 X+ D; k) FAI代码解释
: A8 g; C! l4 A5 Q9 g, g9 W8 B# Secure OpenVPN Client Config( C. d* }; b. x/ J* n, ~$ l
#viscosity dns full1 Y0 `9 y% @1 |, n. G- {
#viscosity usepeerdns true5 E8 j8 f, ]. I: a
#viscosity dhcp true
7 f% A9 ^% a+ u/ ?1 {* K3 Ktls-client! b! S/ S: ]: E$ }/ p
pull' S3 |  l. B: R2 G' x$ w
client; q' K4 t6 H/ |0 ?0 H, k; x
dev tun7 r2 W0 m: H4 \7 m4 M
proto udp
5 V* |5 y& r2 C- r9 Rremote 123.123.123.123 1194
7 b$ M: U9 f6 |& Uredirect-gateway def1: h/ f& M+ |* ]; `
nobind
' ?! y2 W" Y. }( z' Lpersist-key
. s, Q+ @4 ~6 h9 m# ]! y! @6 xpersist-tun
, B+ {2 x. i* `$ d8 J* }. Gcomp-lzo' ^/ \; A6 `- `6 A5 g
verb 3
" e+ d4 g; k! Q- j# Z$ `: F2 B1 Kca ca.crt
1 U$ x% ~1 N  d/ u/ ]: V, ^cert client.crt7 G5 U6 x, i% J7 v7 e
key client.key" f6 u" `$ y) a' }# v$ ^. e9 T( c; r
tls-auth ta.key 1
6 o: g  V$ G$ M! ]4 ~0 ^; i: _- Bremote-cert-tls server$ v) {. n- F8 M. Q2 G+ U% @
ns-cert-type server; t2 k" e% q* m% }6 H
key-direction 1' A8 B9 g% B7 l. f
cipher AES-256-CBC1 n8 }6 s# z. j+ D
tls-version-min 1.2, f3 [) Y/ z0 u  F; b# Y1 b; ]
auth SHA512
$ r9 M0 r% C1 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
( j* y6 L3 E) o) Nremote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-16 15:22:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 04:10 , Processed in 0.022656 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表