找回密码
 注册
查看: 201|回复: 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"4 R9 u5 m* H5 ?( r" I2 I
#!/bin/sh
, l; f) Z8 ?2 b0 A3 W###########################################################0 [9 I1 y' g, ^( p" j/ P" e
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>" u( K6 p" k5 L" _
#
. K; w$ C: W* t" t, d# This script will authenticate OpenVPN users against
4 w$ B; s7 m3 e3 {. @; t8 j4 N# a plain text file. The passfile should simply contain
; s/ h7 a# O1 r9 g' B# one row per user with the username first followed by3 ~! @& M& r! x
# one or more space(s) or tab(s) and then the password.2 B, a$ C/ Y) z" t, k
PASSFILE="/etc/openvpn/psw-file"
% X4 y4 B0 w# V4 a8 vLOG_FILE="/var/log/openvpn-password.log"" M2 x) w! K2 n9 b* E
TIME_STAMP=`date "+%Y-%m-%d %T"`
6 t. s  g" u7 a+ U###########################################################
9 S1 L9 `. j) E, e$ X2 i) L% _if [ ! -r "${PASSFILE}" ]; then
# V6 X3 A3 z8 Z6 t" a+ ~echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
9 ~6 J7 v( b( C$ K3 ?) m0 @+ Fexit 19 k) g7 {4 {/ h, Z& p. S9 i
fi" x- M0 c2 o" h
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
; }7 k( T: r$ B7 bif [ "${CORRECT_PASSWORD}" = "" ]; then
& ~; J5 Z. u' t: a3 q; zecho "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
: h/ t3 @) e$ G8 d: [1 j! Fexit 1  |6 V- b6 Z* v$ N& A) p
fi" a8 K. o8 B: p$ ?
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then! M) z- ?/ X* }4 q
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
- C5 }: R5 V, v1 Q: ~exit 0
: J  ~: B8 d1 H$ @% Y5 W9 F$ m4 Afi( r2 v' ?5 C# C" f- w, Q
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
- ~9 O$ H8 X  r0 R2 ]5 H" [: A( Dexit 1. V' i3 i1 N3 K( i
EOF" f/ ?' [* [" M" s
& x" _' M- ^# z; w8 V" y( a8 ~8 H& \
chmod +x /etc/openvpn/checkpsw.sh# I! \4 L, x( n8 G; b( ]6 B- E2 h
systemctl stop firewalld3 v# Y& I0 T+ |2 {/ u: i% v3 s
systemctl disable firewalld7 C3 C5 b; `! V# z1 W
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux! b/ x& |  [( z: J) a9 n. V! a; H
setenforce 0
# Z# |4 A3 M$ b! csystemctl start iptables/ Z% h7 y: |3 g+ n" C0 L
systemctl enable iptables
1 p1 ?: H! [0 e* t, Z  |4 diptables -F
% A0 u0 o) z$ ^# ~) a  f2 N. z5 \4 Niptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
( B3 K# o# |& I2 J: l7 x# zservice iptables save
9 X; O# b4 }/ {0 ?6 W% ssystemctl restart iptables
' w# B( ?; Z8 @7 N) S0 Vecho net.ipv4.ip_forward = 1 >>/etc/sysctl.conf0 J% S1 d0 t) F9 j; t+ t6 w
sysctl -p; @$ g3 t# j: f5 W0 g
systemctl start openvpn@server/ A4 G, c+ D4 ?, k( d
systemctl enable openvpn@server
4 Y0 I8 H( d+ f/ G. y: F2 `systemctl status openvpn@server: r. z" u: ?3 Z& l

) {3 p6 `1 R* W9 h& cecho ''>/etc/openvpn/openvpn.sh
( t0 l, f4 Q* Q2 _( Vtouch /etc/openvpn/openvpn.sh
0 ?% c: D' {2 }' e+ ?cat > /etc/openvpn/openvpn.sh <<"EOF"5 r2 C1 h7 d! O: O
#!/bin/bash
, _$ r' @/ p. I' n/ q7 }3 U#by openvpn useradd
: u1 k: [* s1 X6 |#name LLL 2022年02月23日13:48:555 J+ I9 n* z& R) B* g- f
###########################################
/ Y5 _# B1 S% Y/ q! K* \2 c2 ^#user="$1"
# s) _  O" ~; {1 C  `- E#pass="$2"' C, f8 y' A* W/ m3 @" M! F, W
#ip="$3"
- [9 l2 w  o% Q. o3 H9 y! e- ieasyrsa="/etc/openvpn/easy-rsa/3.0.8"$ X$ v* T  j) ^3 N- ?( x
function useradd(){" D( a5 m# b2 y( i
read -p "请输入用户名:" user
# y) q  \. N. a8 Hif [ ! $user ];then
/ s! ]" j* ^* c% M6 p5 Techo "user is NULL"
! f3 `5 r4 r8 Qread -p "请输入用户名:" user
- G6 Z6 A; E5 ?* ]" A/ U1 X& \4 Rfi* P& F8 r5 ^5 ?' g7 F
read -p "请输入密码:" pass' i4 s$ d6 A& p, y6 b
if [ ! $pass ];then; K# `) Q3 P; r2 \2 H7 O, B
echo "password is NULL"
6 o2 \$ H# S: yexit+ B7 |0 s! b! s& L4 ?1 ~! }
fi
* }8 b# t3 L! a7 Wread -p "请输入IP地址(如:10.9.0.6 10.9.0.5,IP地址以4个为单位增加):" ip
7 e' R  K# B4 n5 j/ X8 e% v3 H" xif [ ! $ip ];then
  f* _+ P) @) f7 @  {; t  U: wecho "ip is NULL") l: E6 e0 X9 e" `
exit9 {. ~- M; ?/ |6 I( N9 C4 v$ l: S# p
fi
! G: r$ I% S. Z9 J# J/ z4 t0 Osh /etc/openvpn/client/ovpn_user.sh $user" N4 s" X1 Y0 K: U$ A& D
cat>>/etc/openvpn/ccd/$user<<eof
& m  z! G. H2 k" _0 @ifconfig-push $ip
" j8 I( R8 @7 \9 O- Q9 \eof
1 Z+ H% b: l6 z- m0 Hcat>>/etc/openvpn/psw-file<<eof0 w% E1 K6 y" k1 I3 @7 `6 x8 G: r% r
$user $pass
+ E& D# k0 K9 v3 c5 j  t. Weof$ k4 I* H' L& W4 @: r9 V
}
4 F0 {" l" T; R, W* Wfunction userdel(){# Y/ n, H# l6 O+ ]( R  _$ H
read -p "请输入您需要删除的用户名:" user
0 L3 s2 v. B+ @5 [if [ ! $user ];then
/ ]2 M: ]% O4 s3 Yecho "user is NULL"' h- x- T& d( w! d9 f; Y) R
fi
* X: p; R4 j) n! ^4 ]cd $easyrsa) M5 O: r2 p( n; [
echo "-----------------------------------------------------------------"% N# m6 R3 m. m3 {$ z
echo "出现continue with revocation请输入yes"9 {+ C+ p) \( ~- I
echo "------------------------------------------------------------------"  l' f8 K  T0 a' H
./easyrsa revoke $user
' @  z- z  Z/ t8 N) v/ V# o./easyrsa gen-crl
, H' g2 O0 q% F+ n( b1 p0 L7 Srm -f /etc/openvpn/ccd/$user
: G( R5 y1 _$ R" l}2 U* {: z8 ?7 s- r
function alter_user(){4 S$ E8 A. X) n: k9 J
read -p "请输入您需要修改的用户名:" user
7 b8 C9 r5 Z+ ?! t% g9 `read -p "请输入此用户名的新密码:" pass" N; J* E3 {& ~
sed -i '/'"$user"'/d' /etc/openvpn/psw-file; I$ p8 ^, b+ V, A$ f$ d0 i. K4 _
echo "$user $pass" >>/etc/openvpn/psw-file9 B$ K1 J3 O! t5 T1 U" N
}
, w' I0 E' k& s- _$ o. Hfunction alter_ip(){( d& C1 M: L; e6 V  P2 x0 G
read -p "请输入您需要修改的用户名:" user
4 R! j3 q: a( S3 _0 b$ f( s; l. H) Mif [ ! $user ];then
6 h1 M* w& x0 f! d& }" q! ]. pecho "user is NULL"
* v1 W9 B1 b) D+ [* m& sexit2 A% N. `, s/ Q" ]9 T
fi
1 D: H- n/ s/ \. Wread -p "请输入您的新IP地址(如:10.9.0.6 10.9.0.5):" ip
  ^& x0 Z* b& D4 j7 ^" sif [ ! $ip ];then
9 |' i4 L7 ^9 e: l( c8 }1 Iecho "ip is NULL"8 ^0 K: P- L, b7 n8 z% q
exit
5 s5 d% W$ ]+ V  n" kfi( s8 k0 W) J: H( q) L) Q) E7 [
echo ifconfig-push $ip >>/etc/openvpn/ccd/$user
* A6 Q: b- w: X}# a! T" q! J4 l2 X, A! U
echo "请选择您需要做的操作选项"* r: S  J5 ^0 g: p' a' m
echo "----------------------------------------------------------------"
- d% C1 X' \0 T% a; @" k, @select VPN in "创建用户" "删除用户" "修改账号密码" "修改IP地址"
+ }1 X- s2 m4 [( b) ndo) @- N  U& p% G' @
case $VPN in
. B) p& Z& K6 L- C1 {0 P- s0 O创建用户)
5 @6 D5 z% d% I3 Auseradd
% c/ v9 f# o+ {4 `2 z3 y4 i4 O;;/ j- e3 ^% J4 T9 |( ~2 q0 G
删除用户)
; `. O( h) V6 T& W; {0 luserdel
( K* M; ?' H7 Y+ _9 s1 W* p;;
' S: R0 I4 i6 M; \# o修改账号密码)
* W- i6 Y$ c; ^8 w3 Y) M" nalter_user
8 X7 N1 P% X  t2 O. o) @;;; h  Q- j" f; h( L( L& f
修改IP地址)4 K% v/ Y# P: I( v3 h; L  e
alter_ip3 e& D  {) M) {5 x0 ?1 v- v3 w
;;
, G! x! i: Z. x9 Pesac( N- x8 d% u( p& `! B* g
done5 f& J/ l" F4 U, f
EOF6 d4 O" Y2 C' D" ~# M

, T$ ?! m; O1 g  ~  Iecho ''>/etc/openvpn/client/ovpn_user.sh2 x, T+ t7 t9 L0 D3 v/ u9 L1 M2 n$ @
touch /etc/openvpn/client/ovpn_user.sh
7 ]3 H6 S1 `2 \- qcat > /etc/openvpn/client/ovpn_user.sh <<"EOF"" K( u) _4 L4 v0 s' ^" m/ W: P
# ! /bin/bash0 Q4 N% g. A% K
set -e
+ b& e$ d* O* b, }" E! UOVPN_USER_KEYS_DIR=/etc/openvpn/client/keys! d* ^: ^* U7 r" f4 P( T( L
EASY_RSA_VERSION=3; x, ?& L. j2 K# e0 ~
EASY_RSA_DIR=/etc/openvpn/easy-rsa/7 p# R  u0 {% {5 I
PKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/pki6 t( `. K' L( c; i) a+ L% j

3 `' C0 o# T+ xfor user in "$@"
7 h8 ]; \& r) m) {6 Udo
( v2 r9 j/ I( a3 T) V8 {if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then; x8 w7 V  o# E2 e
rm -rf $OVPN_USER_KEYS_DIR/$user" V# \3 M% E7 Y- z
rm -rf $PKI_DIR/reqs/$user.req3 G; C" Y, q# r+ [. W
sed -i '/'"$user"'/d' $PKI_DIR/index.txt' `% n2 R: i. ^% T9 |
fi/ ]* N# L' `% ~& U
cd $EASY_RSA_DIR/$EASY_RSA_VERSION4 ?, t9 p4 N' _! }5 O
# 生成客户端 ssl 证书文件
3 D: b% M$ d+ P* V/ W  Z./easyrsa build-client-full $user nopass; L( ^6 G% i2 L1 h
# 整理下生成的文件: @4 E% \" n) u0 d0 Q
mkdir -p $OVPN_USER_KEYS_DIR/$user
5 C1 T* p$ b( V, D% |* {0 ?cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书
; A6 `& U3 i# ycp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书
3 \3 i) F: L8 \; B  F; R9 e: @  _cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥
3 r% l( V1 S, x8 |6 E5 M0 L+ Icp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件& V1 ]+ Y# X" n6 s, U
sed -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn1 s3 Q5 j3 k/ U' }$ c
cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件2 Z6 L( s8 d3 T! x' \# ?' m8 l& f1 d
cd $OVPN_USER_KEYS_DIR
1 B& y0 W6 j9 c# q2 y! N# r2 |+ I' vzip -r $user.zip $user2 D+ w$ S0 _6 [9 e" s
done
+ |! p% D& c& N8 F7 Nexit 0
- {1 T. v5 a' AEOF/ ^% {3 C4 a9 j& n8 a7 d% I
$ j- L7 b2 J9 B1 d9 G
echo ''>/etc/openvpn/client/sample.ovpn! b5 r4 ?9 H: k5 k/ X) s; w
touch /etc/openvpn/client/sample.ovpn6 X& H$ q- f6 P/ [7 p/ G. J# W
cat > /etc/openvpn/client/sample.ovpn<<"EOF"

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:11:31 | 显示全部楼层
# 监听地址, a- E0 H1 q  N
local 0.0.0.0  : s9 i& f3 W2 D) `
9 o3 v4 C2 H/ P& u( e3 Z* [8 q3 V
# 监听端口
2 }$ W( r# a  Z7 r$ fport 1194  
1 F9 D* ^; M9 Y" @ % x" o) j( ^9 {* D! u
# 监听协议8 }* k7 n$ X" h) T
proto tcp  . c) u: ^$ y  `3 l! V0 D* N- _& ]

. Z/ H) h  {; ?/ F; E" s) Y# 采用路由隧道模式
. r. e% [* q1 s* Ydev tun  
2 p; e+ v: m6 R, n4 H- l% g9 @: t, g ! }# n$ h9 Y; d: ]
# ca证书路径( d5 \/ n* h. X/ d* x' e% a
ca /etc/openvpn/ca.crt  ' [1 Q9 v5 E: K- u! Q9 p
2 }3 y0 v, W  D4 O$ K+ ]# D2 P1 n
# 服务器证书' }) G& S8 Q5 @  j! b8 ?
cert /etc/openvpn/server.crt  8 w1 o6 t- u; x2 Z
1 o' ~/ t) a! N# ~
# This file should be kept secret 服务器秘钥/ ]0 J  [& V  t: V+ r& z3 d1 N& k5 M
key /etc/openvpn/server.key  
; g% \! S% y7 W' V
1 q$ V9 n0 L+ p, I  @# 密钥交换协议文件' L$ {/ D8 r3 @9 T
dh /etc/openvpn/dh.pem  
" O' ~( O5 _1 @3 ~! h- N4 U, z. X4 z: J
0 Q& B! p- r! O; Q4 B# i% D. T# VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。注意:该网段地址池不要和已有网段冲突或重复
0 j0 c: w8 @# _% P& ~server 10.8.0.0 255.255.255.0  + q2 }, ?2 O- C$ y' `/ f
% P$ i6 v) \, l  d
#使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思
( ~! u. H2 O# W1 M6 ]/ Kifconfig-pool-persist ipp.txt
# H+ p. a; E. g9 B' E7 k   C: a. P  l" v/ ~/ \
# 客户端所有流量都通过 openvpn 转发,类似于代理
8 X. |! r2 T! L3 N$ z7 Opush "redirect-gateway def1 bypass-dhcp". Q$ s, F5 b$ g3 x& k

) A7 g& O! V  `& D6 Q+ }: }; u# 注意:客户端配置,当服务端开启上面一条流量转发后,客户端需要配置如下2条,客户端只有访问192.168.0.0/24的地址才会走vpn隧道,也就是会使用vpn服务端的IP地址,访问其他地址还是会走本地网络
1 c  {: o; F3 B& \route-nopull# ~4 h9 _, T3 l# z5 I
route 192.168.0.0 255.255.255.0 vpn_gateway8 A' C3 J" v- f1 N6 X% D+ o5 I
$ w/ b# Z6 t8 I$ G3 X; }
# 将服务器端的内网地址推给客户端,添加到客户端的路由表中,可以添加多条/ b( q2 Q4 D# r4 ?0 w
push "route 192.168.0.0 255.255.255.0"
/ O5 g9 d0 Z9 T' } 6 `  p- C" b' G9 D( t4 e: r) B
# 服务端推送客户端dhcp分配dns# _+ r( J5 I2 M* o" ~& n# k! h
push "dhcp-option DNS 8.8.8.8"  ' A8 G! t6 w) H
: }  q, a, X: A0 l; n& J# k. P3 k" }/ O
# 客户端之间互相通信
; F6 U3 y5 w1 D: a# Fclient-to-client" M3 E( N& |  p5 z5 F( N3 J

3 b0 ?" V! y2 A4 _! R# 存活时间,10秒ping一次,120 如未收到响应则视为断线* N& y" ?4 N4 Y6 }( x
keepalive 10 120 2 {( T1 G+ d" Z4 H) n: J8 g1 W
4 E+ |/ F; g5 l8 w2 @* }
# openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令1 S9 }% I9 u3 x* J/ }
compress lz4-v20 i' S: ]: s9 o. p4 \, w% K
push "compress lz4-v2"$ e1 w' |, L- R8 k2 l

8 M; H' F. E  I4 |9 _# 启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置
# ]6 U% _4 n; Q3 ~# p& Vcomp-lzo
+ b+ U0 V1 E& C* p. \+ j+ c+ A 4 \9 j0 k& k# T% ^6 f
# 最多允许 100 客户端连接) [7 G9 o/ h( Z4 e& R
max-clients 100  
. n8 E" e7 f& ]  P" X
( r8 P8 }$ S8 m/ u2 b# 用户
. v: \, O5 e8 t0 [% \3 _" muser openvpn  7 S- L* z" `( r5 B2 X8 K$ c" E
5 z: ]3 W; e0 w: V. D- O" z9 T
# 用户组  
: Q- Q$ b0 Z3 A3 Cgroup openvpn  " D" r4 O+ J  w

  L3 h0 T) v2 ]& E) ]# 参数 0 可以省略,如果不省略,那么客户端配置相应的参数该配成 1;如果省略,那么客户端不需要 tls-auth 配置
; N  o+ ?! ~/ H4 q# ?9 d4 htls-auth /etc/openvpn/server/ta.key 0  6 o: u. @- ]6 M3 V8 n- o5 }

; Y3 _8 _# P& R% t& N* q% ~( v6 \, i# 设置一个证书多人同时登陆,如果不允许则注释掉' i% ?7 y. |1 l
duplicate-cn
$ X  i2 u+ v& a3 B  }3 x% V9 O% B

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:34:17 | 显示全部楼层
最好的办法是禁止OpenVPN设置自定义缓冲区大小。在服务器和客户端的配置文件加入:
" m3 i' V7 V+ J, L( U$ O
7 y( U/ z9 }" e: s6 E  A3 `% k' D4 ]sndbuf 02 e$ K1 m" Y) i% V: B
rcvbuf 0
/ j5 T6 u% q$ G2 U
4 ^/ s0 `- a3 d5 J- T) I0 Q1 Z- l; _& W' r. C% h
这样缓冲区大小就由操作系统控制了。对于Linux,这个固定值对于TCP是net.ipv4.tcp_rmem 和net.ipv4.tcp_wmem, UDP是net.core.rmem_default 和 net.core.wmem_default 两个值除2.
. v3 u' i- y1 B
) x9 J( B8 M$ Y4 q) m1 A如果客户端配置文件不能修改,那么你需要从服务器推送更大的缓存大小:+ a# `1 U1 Y6 V6 J/ N
  k- r  G& c+ i7 n  G# f6 X
sndbuf 0
7 O! Z, q% y) N. C! ^* o5 f! Orcvbuf 0! h4 D9 t; i( `# q. f8 t: R& M' A
push "sndbuf 393216", h2 p" \+ |% S  D+ \% Y0 A
push "rcvbuf 393216”$ K$ p" \+ S+ ~3 c

" Y# b) |) m; Q9 I3 s" q
% {/ {3 d6 k0 j, ~, m  x, U4 gUDP和TCP不同,没有窗口大小这一说,虽然不是整个系统都需要。但是缓冲区过小也有可能降低速度。如果你把缓冲区调成0后还是慢,你应该要么在系统层面增加缓冲区大小(net.core.rmem_default 和 net.core.wmem_default),或者在服务器推送更大的缓冲区配置:4 z! o/ d3 `$ s2 e; c
1 x4 U4 n) n" s+ b
sndbuf 3932167 L5 i' V- J7 F2 n+ i) X. `
rcvbuf 393216
# F1 Y0 c' @7 |  u# M% o  K8 ]push "sndbuf 393216"1 }, n+ M; A6 t
push "rcvbuf 393216”7 F+ _$ |. a5 ]( w

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:04:47 | 显示全部楼层
2 a! Y" e; B* i! @! m
这部要做:
& J, ^" a  p" @  K8 l$ h1 b: u7 ~firewall-cmd --permanent --add-service openvpn
& U# C8 o8 j& L# h1 r  F3 `- X* qfirewall-cmd --permanent --add-masquerade
# Z; d: I2 H7 s7 Wfirewall-cmd --reload/ I  s1 Z/ u+ r( G( I

: V1 A+ h/ @: r/ J. {
2 W; I9 K, E3 }优化后的配置:
  B  U! b* \! ^& h9 o# e; K" ]: B+ ~; m; @4 U$ U0 k5 N3 z/ G+ d

/ P& M, }- }; m0 _' `  F  r服务端配置 (server.conf)
( \5 A% U4 t+ k1 H# 基本设置
$ G( e7 }# e# r3 W% ~local 0.0.0.01 [3 J! A# I! e7 q) O
port 2197
* O5 K2 i6 K3 N4 m, Hproto tcp
; U( ]; }  @  _1 Zdev tun
* o$ A7 L7 N: M& y* K+ e9 D" W5 btopology subnet  V" X# j( J( \. I/ s  W! C: N

0 E( }/ R  J1 N' z

7 _8 N* x$ g' X* }* U# MTU/MSSfix 优化,避免 TCP-over-TCP 卡顿和重连
, P6 k3 B% [/ n' i& R$ btun-mtu 1450
" _; N/ w& U3 `5 Fmssfix 1410
& z4 x+ m; H: D8 Y! _( epush "tun-mtu 1450"
) M% ^# p; L# X% i7 E$ ]push "mssfix 1410"
2 v  R7 B+ m- W2 u4 j9 H6 l
, a& _- C/ K3 I, E; s8 v9 U  J

$ Y% ~: y$ Q' g: i2 y# 证书路径: D4 ]6 ~% O  |' C
ca /etc/openvpn/certificate/ca.crt
  f$ R6 h3 ^% u$ P3 ~6 W3 t0 R7 Lcert /etc/openvpn/certificate/openvpnserver.crt
3 \. k9 F- L/ D! I/ [/ `key /etc/openvpn/certificate/openvpnserver.key
& q$ N/ W/ ^% c* h( T! c0 Jdh /etc/openvpn/certificate/dh.pem
+ \; R8 y% R: t/ xtls-auth /etc/openvpn/certificate/ta.key 01 K& D/ d' k) o4 P0 f  W6 Q* R+ J
tls-server6 }: f4 U; g1 R, v
; `2 j$ ]9 z- |) }% V) s, `, m6 i

4 t* U) V) c" g# VPN 内网网段+ Y( O% A9 E" V' y' Y4 a# D% J
server 10.10.10.0 255.255.255.0, j4 b: h+ w0 [9 U
ifconfig-pool-persist /var/log/openvpn/ipp.txt
* Q! |; [6 b: j0 |3 E: T' R% b
/ f6 @4 Y6 k' m" Z) E) n3 t

5 R; B4 p7 ~* Z' N  X- ^# 内网路由推送3 y' q$ Y) p. N6 {+ p; K
push "route 192.168.16.0 255.255.252.0"
2 \1 I5 F2 J0 S% S% P( c9 E! `push "route 172.30.1.0 255.255.252.0"
* _1 q; S3 i- j8 x& V7 f% ]+ V5 r
3 V  C- M; ]. `) L" M3 J  a* g

) M- m! x9 i5 {2 l/ Q, V, @9 b/ F# DNS 推送& y1 d; n0 v2 O
push "dhcp-option DNS 119.6.6.6"+ Y: B% x; Q7 G# @4 u: ?# |* S
push "dhcp-option DNS 119.7.7.7"2 A  v' d3 j( I
' N& V, n3 A' Q( c
8 D0 j6 L( R' y8 i
# 客户端互通2 T* j# A5 B1 ?( G! v) j2 }  G
client-to-client3 K# ]* ^$ b- Q) g: e. N/ y. D& b5 O" l

* y. r; D* K; |: g* Z7 U/ h
5 x, u2 w8 t) z6 B2 d. ]& ]
# 保持连接,优化 TCP: [3 M3 z# I5 @* N
keepalive 10 60
  u& \! ^+ b$ Z' m9 _. ttcp-nodelay
8 a+ {' ]1 J7 C1 D3 d- G( k& c7 w( ?/ @4 O

: a, R& ?' m$ L  j# 加密和压缩
/ N% u& d' h/ c" d3 P/ N  scipher AES-256-GCM
' n+ M. _4 O5 V  D* |auth SHA256- j+ t; W* \  \
compress lz4-v2
$ q$ @9 ]$ {6 h) D6 ]push "compress lz4-v2"
) E$ P; m6 J8 j  r$ @& J" ^
( m9 w- A6 h6 F# g& q! Z% W* n( G. o

$ x1 w. x- W+ z0 }, Q# 客户端数量
0 t  S* L+ `2 i* O" w/ rmax-clients 250
: S" c! ]& f( ~& K$ Rduplicate-cn   # 如果允许同证书多端连接! P5 q. f, r! o+ {/ v3 k
. z# k. D: E& @% ~
: W$ |. o# w" U  N
# 用户权限
5 T6 l" U7 d( d2 suser openvpn
; F. f% ~; Y9 r# Y" Pgroup openvpn
! N# K- K- ~3 M, P7 b/ C. upersist-key
/ Y2 S, _# Z, L  Ypersist-tun
& X% N; _) c" N- ?5 o8 r! e+ _% T+ n# B7 B8 G: L) G
# V6 v  C# j8 R+ f4 h# j: v0 d
# 日志8 H+ |7 v+ R  O% z( }: r( L+ J
status /var/log/openvpn/openvpn-status.log) I) R8 q  U% r9 m4 i, a3 @
log-append /var/log/openvpn/openvpn.log
5 o6 _* W2 F/ b3 G  `; u3 g$ \5 bverb 3
0 ]8 X7 P+ N% y! l& a/ _& ~/ q
7 }) ?3 p2 W$ v( [  }

3 e7 h0 s* B1 G客户端配置 (client.ovpn)
5 S/ U% @1 A# _client
5 W5 O( g" q  M. pdev tun
+ ~& f8 w6 R9 x  Z8 t. tproto tcp( \7 B- w2 Q) [# g" ]+ L
remote 119.99.99.9 2197# @2 C& _, X1 ?1 J) L# `# t
resolv-retry infinite
: o- Q, i6 q6 {# @6 D( B7 lnobind+ d2 n. g( i4 M) k
remote-cert-tls server
  X) c+ _& X8 F  j' T. I9 z; {' n! M- ~. T- P

& R2 N# P4 p/ H, A$ ~! C( S7 f# 证书
- b' I2 d0 e3 Z: ?/ O7 q. nca ca.crt4 H2 C% v" T* z2 f4 w- v# b. t
cert rui.crt  v; K. ^- {; ^& i! V) I
key rui.key
9 b3 z$ d) x% T0 Btls-auth ta.key 1
% Q% w6 G! \( \* ^- E- Y' n0 {6 q! P3 J# ~" Q
( v3 J# D, Y2 z
# MTU/MSSfix 同服务端% u6 q9 y9 E1 U
tun-mtu 1450
- w2 J% g- W# y0 p3 r0 ]8 m/ Cmssfix 1410
1 B" _4 x* P. R, [5 J0 I; J$ Z/ u2 c! t2 K

1 |0 T5 F9 m2 Y$ ~' t# 加密/压缩一致
& `/ d% W1 C  x% bcipher AES-256-GCM
6 _5 o: |/ o; b' `( ?; Xauth SHA256; [$ B3 i) q2 w) H! t) b
compress lz4-v2% r" @" j6 g. E" V  [8 E2 \6 z7 S
( T% S* K9 ]; t# U0 o; r
) ~3 ]- u+ ^+ |" w# J' R. |
# DNS
) g! i, y( Z5 S- V  a. M) I+ idhcp-option DNS 119.6.6.69 c, j& {. [, t1 E
dhcp-option DNS 119.7.7.7
5 k: K' f1 Z+ L
+ V/ ^5 T7 i  H* L4 i1 X+ r

  _0 V! f; e( B# 自动重连优化
, {  A, i4 j# U, A$ K8 dkeepalive 10 607 F* m6 g8 I( E. x! ~: S7 ]
persist-key
" ^9 p5 J& v6 T+ {' k- ipersist-tun$ w' G7 {/ P6 Q$ w" C$ p* n; k
remote-random
4 e/ M5 n+ Z: J) X+ gtcp-nodelay
, ~6 J+ I* m# d" Yresolv-retry infinite( Z: F3 Y8 g4 f9 g$ p( k8 l
, @) n; x: W# [9 N

# H- b  N  A0 J. B  D' ~' x# 日志和调试
) T7 q3 l: ?, v- Iverb 3: {* G% v$ ^2 p3 ?; O

+ F/ ]4 ^0 t" r0 ~& z& H9 _' J5 |. s4 f) T; @$ G2 T- ^

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:09:01 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
1 d$ P; Z, Y4 N5 m0 L* n
* y. E& S" h6 G. P代码语言:javascript代码运行次数:0
3 P0 B% |- r) y! G  D运行
! j6 S+ `" n+ ~4 d' xAI代码解释
) T) J  d  C$ ~% u1 i4 Nyum -y update
& r& n0 c; W9 O0 q4 `虽然也是可以不进行更新直接安装。
$ ]7 ~/ o) Q$ x2 |/ s% \) ?( U! Q2 a% H! M
安装 OpenVPN 和 EasyRSA
1 S3 \: }+ n* a" Z* l! H2 Y5 n+ L2 m, W
安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
$ a, ~4 y( A/ [% U# [( C9 `# S+ @8 Q8 b& C( e8 O9 P
代码语言:javascript代码运行次数:0! ~3 w  g8 Z+ y( ]# V
运行
: G) k3 A. u3 L- u4 r1 Y7 iAI代码解释3 b  v3 E% \0 p' k' I+ s9 H
yum -y install openvpn easy-rsa firewalld
" k% f+ H# O& l9 g  a如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
4 C8 y' @/ U; X; k3 C  q7 p( c% b1 q9 ?, u
代码语言:javascript代码运行次数:0/ B! _. v6 K* [) }: v7 D! i1 l5 d
运行# \+ G7 F0 _; a
AI代码解释
, X; B) F. b, Q) @" \yum install epel-release -y
, S+ M0 U1 N9 `# v" @生成 CA 证书、服务端密钥与共享密钥/ ?: Q  w0 d+ E) ~' |
5 t1 z6 w# ~( q; t+ w
这里步骤比较多。
; P7 Q/ Z* _6 H. }! B/ _. O; P4 i  A- j' L0 @
首先需要初始化 PKI
; X7 I; r& H8 U& A( [' M4 p2 \# o: E  |4 E+ N7 M
代码语言:javascript代码运行次数:0
  q' V! [- b2 |& s& W: w# O# }1 V运行- F" s0 g# V1 R
AI代码解释
2 k; U3 F9 M8 S# B9 r' Gcd ~
: E8 @: c& E& {5 [/usr/share/easy-rsa/3/easyrsa init-pki
. [; o! u) f9 U+ v4 r接下来是生成 CA 证书5 c  g" l+ b; R. }

: N/ [0 w9 [; _3 P0 f1 E. p2 _代码语言:javascript代码运行次数:0
9 @7 l# Z4 k: u* ]/ ?/ ?运行
- C3 @$ h* e; Q! X2 X8 E# ?- z) XAI代码解释
1 V  U  H/ u3 a4 w" r: s6 a/usr/share/easy-rsa/3/easyrsa build-ca nopass# f/ I. J4 t+ q8 F. N& W+ c
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。% x$ R/ [0 ^6 N3 M
0 x9 h% b# V' J' b" G0 M. ^- V
再来是生成交互密钥
. f% A8 j/ u8 U6 Q, O' d! L, q
: g  r% s/ T4 S& V, P( V代码语言:javascript代码运行次数:0
0 [) H3 ~* {/ J+ u( `8 {& R运行
  ?* O: O8 W+ KAI代码解释
, s1 Y& o! N$ C) N0 \8 e/usr/share/easy-rsa/3/easyrsa gen-dh
' }  g& N9 V5 I; U$ E, r4 b开始生成服务端密钥
. k( s* J  z/ `% L# P0 x/ O5 i' y/ _" Y( L6 b
代码语言:javascript代码运行次数:0
7 J& t$ y' B- G# j9 @3 B运行
# }+ B* I* w  d/ s# ZAI代码解释
+ s+ E  J, P: q' A0 Z: d/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass
" O8 D% H  y3 I: l$ }接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥
  X; v! e' }) B0 r$ x2 m
; S& k/ {  }* z' ^# ~代码语言:javascript代码运行次数:0/ p0 |+ d6 [1 B; O
运行
' ~6 z' h4 e: f& c$ [; EAI代码解释, l/ t% C% P6 Z6 u4 J) Z
/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass
. B! P3 e+ y4 f9 A/ ]7 ~" J最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过0 @! M' ~; H. \; i

  b" K( ^) Z! _8 R代码语言:javascript代码运行次数:00 G2 `. c; s1 u, \$ G) ]2 N0 u
运行
( t' F! Z' c6 }) |AI代码解释
& F: O$ \6 T3 ]" _( v, N) {) D/usr/share/easy-rsa/3/easyrsa gen-crl$ ?; x. \! G0 P) b" Y1 M  V' S
其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥
0 P! S7 _# C1 J' j& m9 H
5 c4 F& f' C2 ]* f6 x9 y代码语言:javascript代码运行次数:0
) a( [2 K2 F9 r8 T2 d0 X运行
0 s; [) J9 }$ ^4 \' HAI代码解释; t! X. n* {/ `" J
openvpn --genkey --secret pki/ta.key
/ h6 ^) I9 s1 w1 f/ _, p在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)3 X2 e7 O% `+ ]3 y) M
! \1 n2 y! q7 O
代码语言:javascript代码运行次数:0
% h1 H3 S+ L% A运行) m7 `6 ?& }5 N0 R+ q
AI代码解释
; l) s* \! l6 N; _cp pki/ca.crt /etc/openvpn/ca.crt. ^; F& H& L$ v0 H( S
cp pki/dh.pem /etc/openvpn/dh.pem
# F2 x9 p/ J4 [cp pki/issued/vpn-server.crt /etc/openvpn/server.crt
+ h  T3 q/ V6 S5 G# B  Icp pki/private/vpn-server.key /etc/openvpn/server.key( f# S9 Z% Q' R6 h6 k
cp pki/ta.key /etc/openvpn/ta.key
- K; n, n! D2 M( wcp pki/crl.pem /etc/openvpn/crl.pem
# E, u8 L" c6 L配置服务端
* g/ F% J5 ^" u8 f: ^0 s+ K* F
& X: v6 k7 ^+ Y/ }4 B+ ~4 H- mOpenVPN 配置文件有许多可定制化,具体请查阅官方文档。( q( q) V: \! r6 c

& H: p& |* F9 l2 q代码语言:javascript代码运行次数:03 a  O5 g9 t' b
运行$ P1 }& ^2 T/ s6 d6 F  [
AI代码解释  G5 \8 o: K1 }7 t9 W) ]2 q
cd /etc/openvpn
3 o, h9 o: _( `2 @# Xvim server.conf/ U) S8 l& l  J9 F1 U6 X
将以下内容粘贴进去
- o$ j' a8 K( z: A3 O4 I6 q2 n9 u* u( }3 r
代码语言:javascript代码运行次数:0
, `/ }3 P$ ]9 c* q$ Y; u运行) O  V5 j/ x3 `' T5 a; S
AI代码解释1 t3 C6 a; k2 l  T
# Secure OpenVPN Server Config
$ @5 {8 Z  c, Q! ~9 t- p5 r* @# Basic Connection Config
6 \7 \' X  O# u: k' y. ydev tun
' Q& ?$ P* a" v# l$ m  Aproto udp  U, J/ q5 f  Y) u3 i
port 1194
/ n2 k0 n' [' y- F3 j8 `2 N2 Ekeepalive 10 120
' S5 J' C8 n2 Omax-clients 5
) \; k/ {+ ]" o, F! S2 E# Certs
! E. P  B  |& b7 Hca ca.crt5 ]5 _0 C1 h9 \" ^: u% b# r
cert server.crt
* o& K) ]6 t+ e4 X) a7 x, K$ `key server.key
+ D: w/ ~. Y* d% R9 n4 I/ gdh dh.pem% S  d( r; [2 g6 ~6 J$ k0 q
tls-auth ta.key 0; k- w. u; w0 m" B& z' I
# Ciphers and Hardening4 i3 q; l% l' E$ L9 V1 {
reneg-sec 06 }" S# z6 W, v
remote-cert-tls client% D' q8 C9 B  ]# \( m
crl-verify crl.pem$ @5 b& b0 b! y$ {* h
tls-version-min 1.2
5 y9 ?# R0 T- C3 jcipher AES-256-CBC! ?- n" h- p7 T' ~
auth SHA512/ a7 b, S7 z) t" Z. K
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, X) W! h' O9 I! k8 ^
# Drop Privs: i& {2 S3 U6 ~$ ~/ u* Q
user nobody0 Y# t1 [/ \4 R# \! \
group nobody
, }! C9 p& b. ~0 A# IP pool  A) n8 K. u6 D8 Q
server 172.31.100.0 255.255.255.0# ^% b8 k6 M5 V' ~
topology subnet7 x0 G: m9 n7 }# h  F
ifconfig-pool-persist ipp.txt% b; f; m1 h' c4 U; E
client-config-dir client8 n6 x% W3 @1 F7 o1 V7 T3 U
# Misc7 _, ]/ D' y7 l1 }
persist-key) d* G# z# p3 O) j. C( t# Q( S
persist-tun8 D  z9 O' V' }
comp-lzo
8 I/ f9 R' T) e. G( i# DHCP Push options force all traffic through VPN and sets DNS servers
" b: w) g3 ]: Spush "redirect-gateway def1 bypass-dhcp"
5 t7 s9 ~/ R1 q; h8 `0 [push "dhcp-option DNS 8.8.8.8"
( F% \. ~* y  M* B9 I" \& Jpush "dhcp-option DNS 8.8.4.4"
/ W2 D& G9 K3 \6 A5 I) ~# Logging9 c" y3 \5 d( `4 N+ o
log-append /var/log/openvpn.log! v! L" c4 b; T+ `5 E2 v& E4 h9 v6 G
verb 35 r( N7 [0 }, a
启动服务端并让其开机自动启动
. O( q* T$ G7 d( Y4 W' S* `
3 W) U4 h5 {$ G0 c. h( X代码语言:javascript代码运行次数:0# {- m+ W; r, d5 f+ D  D4 E# j
运行+ o' r% y7 i3 [
AI代码解释4 C5 g: y; B! K& _4 \
systemctl start openvpn@server
; P% [- w8 g; L  e  Gsystemctl enable openvpn@server
0 I- h4 ]* J" w/ T配置防火墙与流量转发* }3 A' X" w% z; u' |

4 A; T( j) p: h; P放行 OpenVPN 入网流量与开启 IP 伪装
; z' t" D" k1 F1 w0 F+ b
& R% @. v4 o0 e, c/ P; C# t代码语言:javascript代码运行次数:0
1 s! Z; ~; Y- q! i( L6 }+ N运行" Q! Z7 Q5 c. q. ~4 f, _
AI代码解释
% L. k. L4 y4 o- H- afirewall-cmd --permanent --add-service openvpn) T3 Z7 m  ]7 y8 |3 J
firewall-cmd --permanent --add-masquerade3 b" ~2 [7 D' }- P( F
firewall-cmd --reload
3 D3 |$ |( F; ]; R7 @检查是否开启流量转发
/ G+ V) U! T$ b" `$ A9 }6 d3 \$ F1 e4 C( d- {; x1 [
代码语言:javascript代码运行次数:09 H6 t* h& f4 _. s/ O9 ~' m
运行  t$ _4 l* H2 r0 f
AI代码解释
+ n% f* U2 }% x+ y+ u' Dsysctl -a | grep net.ipv4.ip_forward
3 G" d, R# n1 W" G! Z确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下
2 V7 B" G% @. d1 r2 w
( a8 A' e7 N' H" @: F+ E  c代码语言:javascript代码运行次数:0
4 _( R+ J7 `! E! B% O运行
/ J* T4 Q5 ]8 R: J" p' CAI代码解释
0 w& Q7 S) I7 Xecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
4 {5 ^3 @. m. a# dsysctl -p; ]' V9 E& b! P0 {; E% g
配置客户端- A( B4 g% U% \; ?1 d! `0 V

; c# b/ y' j% e+ D- F5 f* d0 }客户端需要拷贝以下文件* l7 h/ g# t7 }" n

! I  o4 I/ P' q, T. i3 M代码语言:javascript代码运行次数:07 y" }2 T! O, Q8 j9 p+ g( k
运行- ?2 h# H% f& x$ a+ l% M
AI代码解释  H% [$ b3 J5 K) P
cd ~
4 a0 h- ]9 H; f4 omkdir vpn-client-01-config
) y6 M. ?; ?: b8 q5 m' Jcp pki/ca.crt vpn-client-01-config/ca.crt4 C) Q$ S) t, m1 y0 f4 w
cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt
/ @8 F$ s* F+ r, ecp pki/private/vpn-client-01.key vpn-client-01-config/client.key
5 _, o$ j/ L1 ecp pki/ta.key vpn-client-01-config/ta.key" X! `' r0 ?5 r7 ?' ~4 }
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容
% Q' N: |7 \' D" L
6 R: A1 F/ j' H; i代码语言:javascript代码运行次数:0
" \( u$ |/ x* U! T) H% j运行
6 u3 N7 W7 q% k5 sAI代码解释2 W+ r9 ?$ T, D4 [
# Secure OpenVPN Client Config0 \6 `7 t0 m$ m) I8 g6 l
#viscosity dns full
3 t: x6 ?8 D. n) \7 C3 b# U9 m#viscosity usepeerdns true3 }& r: C2 P& f
#viscosity dhcp true, T, o2 M& m$ W# D
tls-client: S) J7 [, K- x! d( p2 i' j
pull
9 \0 F' p( T; J' A8 n; n; Xclient2 u; U! o5 _# u% D9 b' Q
dev tun# l, f6 R. Y) q- j0 n! O
proto udp  ~/ ]  Z4 r" N0 b) ]' q- X9 H
remote 123.123.123.123 11945 v" d5 S& q: f5 i
redirect-gateway def1
/ S* L* |0 p* l% f& q( Snobind
: l4 [  @; B. j% B- apersist-key$ m0 C$ K! D, z; n
persist-tun3 B3 h8 b& T+ G3 ^3 ^# ~" K
comp-lzo
3 i$ r. ~, i% j4 cverb 3
, [9 [+ W  ?; U# B1 ?5 l  Tca ca.crt
' L* h! m* v+ ]7 U; Z! ecert client.crt
; O8 u3 |2 H9 b0 }7 t5 I; O( B5 {key client.key. x3 q- o- c; f% S8 z/ A6 A
tls-auth ta.key 1. \7 ]: B1 w  ?9 a
remote-cert-tls server
0 G6 I/ P, u" @+ Q8 t2 \2 H! b0 V0 Ons-cert-type server7 `+ b" `7 w8 u1 G
key-direction 1
; X( P. q9 n0 L$ `+ @6 v2 |3 hcipher AES-256-CBC
; k0 P# C7 q: }- E6 L$ O* N( btls-version-min 1.2
( E- Y5 p6 H& l: G  \# i# w' fauth SHA512. ]) X6 c2 A& U. T4 Z4 d/ R. z
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
' v9 G8 I0 M4 p* h# `7 U9 b- P$ D$ J
remote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。
! t' h' |6 q5 {6 J8 I  k! y

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-6 23:24:01 | 显示全部楼层
调整压缩设置:启用压缩可以减少数据量,但可能会增加 CPU 的使用率。在配置文件中,你可以启用 LZO 压缩:
( U: R( u) u% g
% B, V( N: P: C  r) \: z- [) Hcomp-lzo

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 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 的所有文件拷贝到需要链接的电脑上,即可开始使用。

1

主题

0

回帖

12

积分

管理员

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

本版积分规则

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

GMT+8, 2026-6-12 00:42 , Processed in 0.024711 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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