找回密码
 注册
查看: 205|回复: 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"% F" Q* ^) r  J8 S
#!/bin/sh
0 D4 R# f" X* s( q( o- _###########################################################) V2 J; m% M9 i
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>; r* |& _- U7 R+ D+ O1 X! u
#
7 Y  J7 F& k* r& p6 h# H( `# This script will authenticate OpenVPN users against& b& E6 r: l7 M" w1 \! o( V
# a plain text file. The passfile should simply contain
9 A/ X! k! k# t: r, `+ X# one row per user with the username first followed by7 n# p9 ]  b0 x0 N* ?: b: e$ W. A- D
# one or more space(s) or tab(s) and then the password.4 \; G. A3 v" s7 U, r4 Q6 a
PASSFILE="/etc/openvpn/psw-file"; @* g! k& M$ L. n# u1 d
LOG_FILE="/var/log/openvpn-password.log". o! u1 N* J. f. W1 ?6 q* ~4 A6 |
TIME_STAMP=`date "+%Y-%m-%d %T"`, h. z5 c; i7 y. f0 v
###########################################################. ^  l" p; d' k9 a
if [ ! -r "${PASSFILE}" ]; then: g. I4 w6 d8 l
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
& ^3 l) D: f) e1 aexit 13 {/ p* {% H& W, p5 p/ n" g! h6 v
fi  x, @* r; T8 h: G# S0 O( ]
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`4 D' h! m9 ^+ s0 B' ~: C
if [ "${CORRECT_PASSWORD}" = "" ]; then6 h# K) D6 z% A: w
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}+ i& O  }: f. Y# p2 ~
exit 1
+ |* ?: a; U; _$ N1 E) H- d) u" ufi, F& Q/ T% Z) a
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then1 U8 z$ g3 G- N, X
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}5 H& i4 H  U5 c8 P. `/ y
exit 0
! A: `  r' o8 ?, _" l1 F# D7 m* s! Nfi
+ _: i( d; p6 H' Y* P# lecho "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}: n* S& V7 P+ ]9 {1 Z2 t
exit 14 j% p" }1 D4 U$ n( b0 Q
EOF
! n9 b$ ^' p) b/ m8 w. v2 v  ?+ i# n1 e, ~! l4 Y0 @
chmod +x /etc/openvpn/checkpsw.sh4 _% z  x0 |) c5 `5 ?! x
systemctl stop firewalld
: d4 i$ ^7 A5 g! M7 ]systemctl disable firewalld% d! J+ y( p* I; b' |6 Z
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux& M# M+ Q" I6 Z1 G( V# ^& y
setenforce 0
. v7 U3 z0 n  H2 k8 F& \systemctl start iptables- w+ @( }* a! \3 g: S
systemctl enable iptables
0 _6 R  u6 D; B( P0 [+ ziptables -F
  R  H; X# [' m4 H. Iiptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
" q, b" h5 J! @/ @% Q) t% Sservice iptables save* e% y% F, s% o, l- \
systemctl restart iptables
! p& P1 \/ ?" u( G$ m5 L8 B$ z# }echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
0 B9 }: j! v/ E! t  Nsysctl -p
) o+ F  v, _+ O5 u# `' y9 d9 n5 Y% lsystemctl start openvpn@server
9 D2 N5 ?  ^4 S2 j% Nsystemctl enable openvpn@server
" [8 [3 m" V# h6 b: `systemctl status openvpn@server
/ l- Q( \8 H4 t" G5 r7 [7 I. S: G# F) b
echo ''>/etc/openvpn/openvpn.sh
1 s: h* {& v  @touch /etc/openvpn/openvpn.sh; i- P& V8 Y& }/ x) ~
cat > /etc/openvpn/openvpn.sh <<"EOF"+ F( [- S, _; N0 s- f2 T' _4 q3 N' L
#!/bin/bash
: m8 g7 U, z& Y) X#by openvpn useradd
% ]5 j- k; y6 b* @+ O#name LLL 2022年02月23日13:48:55
# L* s( r9 b+ m4 @3 y: `###########################################
8 Q1 ]5 p- Z% q#user="$1") g$ m1 ^) x% Y% \+ s$ p; m- M* Q
#pass="$2"
9 f- c- y: Z. J4 b, F1 t0 w5 F#ip="$3"; x3 l6 c; |, G3 P5 b
easyrsa="/etc/openvpn/easy-rsa/3.0.8"
' Z5 \* s  o' Y' {- x1 `function useradd(){
1 A" C( W  R+ o5 m9 Kread -p "请输入用户名:" user
1 ?" i6 X8 E) y* h- Fif [ ! $user ];then
% f( M5 e  p. \& c- E6 U' Yecho "user is NULL"4 d) U0 z, M0 S; O
read -p "请输入用户名:" user
0 S7 l8 k0 ?9 D* k3 i  I' _fi
) c# t( N$ z3 P3 c( S! Uread -p "请输入密码:" pass6 V' r$ }& I; a" v
if [ ! $pass ];then* ~8 Q! s1 Z$ C! f. Q( ^
echo "password is NULL"
- N, w5 U9 _3 }exit
. L7 x* \% N- r3 Z+ p5 `4 s7 rfi# z8 J- Z% x; z* e/ f$ _
read -p "请输入IP地址(如:10.9.0.6 10.9.0.5,IP地址以4个为单位增加):" ip( M5 W; l3 n2 M7 h3 y8 o1 {
if [ ! $ip ];then, |' V8 A3 T. [6 [% A
echo "ip is NULL"% i6 U' c% D- m; x8 B
exit
" z% K7 V6 e; C" D0 z8 X) Lfi
& E" _2 B+ `9 c  x1 O. l" |sh /etc/openvpn/client/ovpn_user.sh $user
8 v3 @  D5 q* N, Rcat>>/etc/openvpn/ccd/$user<<eof
: \; x: A# N. [6 uifconfig-push $ip( _; o2 l- v. `( J2 d3 P
eof; ~" @/ G& _: {) a* X+ U0 z6 }
cat>>/etc/openvpn/psw-file<<eof: x) }# D; f1 C. Y
$user $pass
) O3 x5 _; I: T6 [  veof
6 Q& g% h  X' h' b  z' ^7 ~/ X}8 A9 Z+ i- w1 T: n' R
function userdel(){- k5 B9 W2 `6 x5 H( A
read -p "请输入您需要删除的用户名:" user8 ]" [! A  D, _9 K5 |
if [ ! $user ];then
: d0 M' w! g- e/ i! ?0 x6 Necho "user is NULL": N. ^8 m# f4 b! k7 Z$ D
fi6 N1 u% W! O3 T$ K" x! {$ G
cd $easyrsa
6 a5 A) N/ O* ?" vecho "-----------------------------------------------------------------"4 o: ^# r- r4 p/ k( h1 i
echo "出现continue with revocation请输入yes", v4 d& ?/ U. n6 W( I8 J
echo "------------------------------------------------------------------"
+ T7 b3 M1 J5 I8 l1 v$ {! P" {3 J./easyrsa revoke $user5 Z- D* {. x$ A/ E" _" I
./easyrsa gen-crl
/ ^. g. c) W. x7 `) {2 ~rm -f /etc/openvpn/ccd/$user
6 g) o# e* X( E) A3 }- w}
( W1 @( I( n' c& H/ [; [+ afunction alter_user(){1 l4 r  Z. X1 f! u: [& T4 x' E
read -p "请输入您需要修改的用户名:" user! }6 \) w7 D7 c; R1 @) r5 M
read -p "请输入此用户名的新密码:" pass
, E' P9 B6 S/ N3 B- esed -i '/'"$user"'/d' /etc/openvpn/psw-file9 j' W! Z* e( L: l5 U2 u& N
echo "$user $pass" >>/etc/openvpn/psw-file/ c" X. @, z5 O: }% n
}* u5 ^+ _  L  v* U
function alter_ip(){5 H/ n6 _" _0 N0 V! w' u& c( o' @
read -p "请输入您需要修改的用户名:" user
* G) u; h) I' N( q% E9 M& Q0 k9 pif [ ! $user ];then, W7 j1 n5 ^( K8 k
echo "user is NULL"$ l* u1 o' m" Q1 s
exit9 |/ c$ T( K) @/ U" B/ b
fi
! t# ^3 H' }  N0 g2 l) y0 L! [0 rread -p "请输入您的新IP地址(如:10.9.0.6 10.9.0.5):" ip3 C  ~2 K# n! @3 b
if [ ! $ip ];then
$ J: Q3 B) c. z: ?- m3 V- u, g9 Fecho "ip is NULL"
+ X; |! N0 ?/ N. H  S' }exit6 l/ h; H6 b6 ^
fi
" f3 T2 o& a' |. ^; C4 O6 uecho ifconfig-push $ip >>/etc/openvpn/ccd/$user9 H6 i! P4 g* f) `
}% X8 M+ S4 ^" l/ [0 i
echo "请选择您需要做的操作选项"5 n8 M/ L- T9 [2 `9 _  Y
echo "----------------------------------------------------------------"
2 g' |' M3 P5 O! }( @select VPN in "创建用户" "删除用户" "修改账号密码" "修改IP地址"$ T7 H2 B  k+ U. n& j& t+ |
do0 L( ~0 n# S9 S9 R/ U: r
case $VPN in
6 J' U) F; a" k+ c创建用户)4 v. `6 p7 t7 R' G3 J
useradd4 O4 U* H. s& [
;;5 x( B) {' ?4 Z  W( q
删除用户)
4 @& d" D* [2 @0 N% [, X, muserdel
3 A- O0 T' Y+ `. q;;
3 A) v9 R3 Y3 P- ?% l# _. r% F! @修改账号密码)
+ L7 I5 w+ Z9 I! D$ W/ nalter_user
) d: v5 @2 Q5 R9 I& s/ z;;6 ], `/ V% K% A2 h) K1 J
修改IP地址). _4 G( v* {& k9 X( J1 g6 r
alter_ip, `( ]* ]9 M# i
;;, r  i% q' o  f* v
esac
$ I2 _! }" R9 E& K7 u0 O3 gdone8 S" ?2 J7 u; K/ y/ D
EOF
! c2 Z) V6 m$ a. u6 w# K: p+ T2 m2 p
echo ''>/etc/openvpn/client/ovpn_user.sh
3 X3 ~) h" t$ I5 j/ ]! [6 v, Rtouch /etc/openvpn/client/ovpn_user.sh  p4 b7 @4 E" R; F5 Q) Q
cat > /etc/openvpn/client/ovpn_user.sh <<"EOF"
% Z7 i+ t9 `6 G* l( G# ! /bin/bash+ Q7 V! A& z# ^: h
set -e# u2 g1 k7 b( e! o1 P) z
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys) {2 \3 g/ g) e0 R5 l: ~
EASY_RSA_VERSION=3
+ D) U9 c  _; n+ u" YEASY_RSA_DIR=/etc/openvpn/easy-rsa/: I0 S/ b1 g6 ^  d" j0 i) T
PKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/pki0 c. T' I; [6 d$ a4 u: i
  I- q$ R+ t+ L
for user in "$@"1 s' H9 ?" p/ ^2 H5 A( p
do
" H, M6 w, p0 Rif [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
! z% O$ C7 z0 z( t  m1 k4 irm -rf $OVPN_USER_KEYS_DIR/$user1 ^6 `. G8 K. X0 r6 ]
rm -rf $PKI_DIR/reqs/$user.req
$ _+ {1 ]+ {2 ?+ S- N& Xsed -i '/'"$user"'/d' $PKI_DIR/index.txt" [% M4 I- x7 m
fi1 j+ }2 q2 [- o* O  P
cd $EASY_RSA_DIR/$EASY_RSA_VERSION/ b+ K1 s- q& |, L0 w1 J) D
# 生成客户端 ssl 证书文件
7 U) |/ Y5 y* v) O! @./easyrsa build-client-full $user nopass7 n1 L3 J6 A* F& u4 W) ^. h
# 整理下生成的文件
7 R  P8 R5 [8 V9 k# C1 vmkdir -p $OVPN_USER_KEYS_DIR/$user) c' b0 i3 R2 V9 V8 {5 K
cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书  S, Z: ]" U* d( |' v7 |8 F
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书
9 B  u1 g4 m. ~5 Icp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥1 }; k" Z) v; g) N
cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
- r4 v5 a) S, G( k% l3 q: A# msed -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn' z. c" A& ~! ]" a: f% a+ |
cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件6 V: c2 D7 `4 _% L
cd $OVPN_USER_KEYS_DIR# w5 ~% u5 X% s: X: P& ]! V1 K
zip -r $user.zip $user# U7 E* w' Z' h# ]
done
0 x& |2 v, z$ W  c3 Lexit 02 x  t; Z2 P& w
EOF
8 Z; [+ {3 [- r5 \* A! e% v+ p, M( ~" {1 k3 I( d( K
echo ''>/etc/openvpn/client/sample.ovpn* G- s$ t9 X. q& D0 d
touch /etc/openvpn/client/sample.ovpn
# t) y. D- f, {: Jcat > /etc/openvpn/client/sample.ovpn<<"EOF"

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:11:31 | 显示全部楼层
# 监听地址
5 S7 a) N* Z2 ^* `6 ^" n% Nlocal 0.0.0.0  : J# d& I& P9 j1 G- N- y

5 x% l/ g; Q, O% i, i6 h) ]# 监听端口$ }' d! L* x+ P  r) z( Q0 K# {
port 1194  
0 b3 R6 h' m' Q) k
0 ?* {7 R& \" g5 l* B' ]# 监听协议$ O6 U1 M0 u0 i" g
proto tcp  
" s: u; G! ], m+ p/ i) _
$ f2 \2 U  r0 J) o& R# 采用路由隧道模式
: N  a" i3 S1 T% c& vdev tun  
9 y2 J' {9 J; `0 B
' \: E; r) A" x5 U( R$ A( c# ca证书路径
: L% s7 j0 z7 C' k. bca /etc/openvpn/ca.crt  # w1 d1 z/ G2 T. x- N

" q% Z) h3 ?9 A3 M  [5 J: Y! ]# 服务器证书
) Q9 _0 T2 ?8 O  ?cert /etc/openvpn/server.crt  
! V+ P) u( w' J# [
$ c& ~# d/ C. I0 ?2 }5 d4 v4 C+ @) E# This file should be kept secret 服务器秘钥* b. C1 ~: @$ K" k" {
key /etc/openvpn/server.key  1 S8 j# R; S7 y$ {/ L: [3 i9 z
0 F( Y: ]$ D0 f$ b" u* }
# 密钥交换协议文件+ J- N: {; P8 L: _1 U# |& T# y; r9 \; @
dh /etc/openvpn/dh.pem  
6 C: Q, t) Y, X/ Q% F0 ?2 P
: `) A/ n4 C) C: `) Q5 ~, |# VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。注意:该网段地址池不要和已有网段冲突或重复
0 T& g2 T& G8 c- Y4 k; X' `server 10.8.0.0 255.255.255.0  
% u$ a9 r; f1 o4 ]
4 }$ J, {' r0 g#使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思' H, N' ?7 U( o+ C( J% H
ifconfig-pool-persist ipp.txt
* J: _3 t4 f* j6 `0 `. @$ Z
4 u8 X! P+ ~1 W. j% o* g! M# 客户端所有流量都通过 openvpn 转发,类似于代理
. A6 M7 c7 Y5 k; }  opush "redirect-gateway def1 bypass-dhcp", t! \% }% L( z8 V0 V
2 n$ ~2 M6 o0 C9 E
# 注意:客户端配置,当服务端开启上面一条流量转发后,客户端需要配置如下2条,客户端只有访问192.168.0.0/24的地址才会走vpn隧道,也就是会使用vpn服务端的IP地址,访问其他地址还是会走本地网络0 g+ l. y" t7 H
route-nopull# K: K/ `* ~5 R7 ?
route 192.168.0.0 255.255.255.0 vpn_gateway2 W( B/ Y6 W; i6 l* I
9 p! v, f; \8 J, X" m
# 将服务器端的内网地址推给客户端,添加到客户端的路由表中,可以添加多条4 D( o( ?6 C0 u
push "route 192.168.0.0 255.255.255.0" 0 B, s2 L5 ~$ R+ q5 Q9 }/ P* v

4 _: ~1 C( Z  F, ~( P# 服务端推送客户端dhcp分配dns
0 y" e# ]9 y8 Q6 _4 d& Rpush "dhcp-option DNS 8.8.8.8"  
9 W4 L) V9 P- g) C: g' a' I0 Z6 n8 X ) V  w" o* [* W9 k0 K
# 客户端之间互相通信
. X' u9 M. G& i" [6 Y& F. [client-to-client: G# X2 d/ {/ U  l  d8 C

0 B- U: G; w6 R9 [- p8 c1 }# {# 存活时间,10秒ping一次,120 如未收到响应则视为断线
; N: i; t0 O9 o' T( Nkeepalive 10 120 / E. u: B3 T" Y% [! d

& U+ L& }: L- ^1 A# Q; M# openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令
2 K# @7 s9 J+ {. M: |compress lz4-v2  M  v! Z/ a( ^; c
push "compress lz4-v2"$ W& |) {5 d; g6 _8 t7 q* C) e
1 R, f# v2 [' I) a+ N1 v2 P: `
# 启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置
% M( I4 ^2 F0 Ccomp-lzo3 J4 A8 @& w, D$ m/ y* `4 D8 g
* H1 o( i3 b: J- B6 I% G! M/ C$ ~
# 最多允许 100 客户端连接
% K6 N* Q7 W0 Q5 G+ l3 nmax-clients 100  $ i6 b/ s# l7 C  X) Y
+ ?8 ^" j1 Y! l5 E. G
# 用户3 ^8 H; A6 }$ G' h/ V
user openvpn  & |7 U3 e& u9 l7 i6 ~
2 N! k. K$ f, B6 U5 o& A
# 用户组  5 z( V5 d) u3 l3 v0 a' H' M
group openvpn  7 I0 i0 d: ?! v9 V: W; l" n

( n0 U; |0 J$ j( R. h* h8 q/ v# 参数 0 可以省略,如果不省略,那么客户端配置相应的参数该配成 1;如果省略,那么客户端不需要 tls-auth 配置
; [! [% i2 Q- utls-auth /etc/openvpn/server/ta.key 0  6 g$ f9 y! a# W- A
# @! L' h$ S$ M5 j
# 设置一个证书多人同时登陆,如果不允许则注释掉( N& Y8 K6 H' k) a$ c8 M
duplicate-cn
! d! c4 h* {2 o& m2 _0 O$ l

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:34:17 | 显示全部楼层
最好的办法是禁止OpenVPN设置自定义缓冲区大小。在服务器和客户端的配置文件加入:! q. \$ T6 U' ^' Q2 g! O* a; K' c

" z! Z  \7 i& u5 L$ W! |3 y& Vsndbuf 0
# I3 y, ]$ Q7 T$ I4 [" F  h! _rcvbuf 04 x; r' o/ C" ^

$ T& D1 [6 o; J, n3 c' b, H! G! B2 M' M- x" {- d" r
这样缓冲区大小就由操作系统控制了。对于Linux,这个固定值对于TCP是net.ipv4.tcp_rmem 和net.ipv4.tcp_wmem, UDP是net.core.rmem_default 和 net.core.wmem_default 两个值除2.8 K2 |7 j' M& t! \9 Y" N* `
2 L; U6 m, t; t
如果客户端配置文件不能修改,那么你需要从服务器推送更大的缓存大小:5 \( X1 M5 i9 F/ P  {
+ [8 J0 M7 g3 g9 q8 E
sndbuf 03 y) N* {2 N( l' a  w
rcvbuf 0
$ I7 Y" \9 S6 n9 G- i# L9 U: kpush "sndbuf 393216"
) ~/ K$ b' K$ W5 J; m# \5 M5 Upush "rcvbuf 393216”! _  A$ g9 l! `" ]- P3 o
: o) S* K# |) x" U9 ]- T

6 t4 ]9 k3 X" k+ M3 F4 X$ eUDP和TCP不同,没有窗口大小这一说,虽然不是整个系统都需要。但是缓冲区过小也有可能降低速度。如果你把缓冲区调成0后还是慢,你应该要么在系统层面增加缓冲区大小(net.core.rmem_default 和 net.core.wmem_default),或者在服务器推送更大的缓冲区配置:, i/ c0 E, R9 K2 z+ ~  U
# z1 y3 }2 `% ~0 h6 f
sndbuf 393216
! b! h. X1 L+ k2 H0 krcvbuf 393216
1 j3 I  u2 g% n* y; mpush "sndbuf 393216"0 b  E  x# B6 l, w+ f7 `
push "rcvbuf 393216”: Y7 b% l& {) y! p7 t% ^" a

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:04:47 | 显示全部楼层

# {" S! |9 f" r" m" R, Z4 L这部要做:
% F" g& l& q7 e2 c; N# \- Yfirewall-cmd --permanent --add-service openvpn
/ [! ]; `4 v# ]- B% [; p+ C9 T, ofirewall-cmd --permanent --add-masquerade" P4 {1 H3 A% {) G* P
firewall-cmd --reload( S5 ]( F2 n9 [) o: D0 E
  M, f' P: E4 _+ L# s7 m- b9 d
. u# v2 ~1 m* o& h3 N' m& L
优化后的配置:: \4 ~8 U* r5 S  k8 S, T
+ F/ ?: v+ s7 ~& F

3 ~3 {6 }& S. L3 _' u; ]服务端配置 (server.conf)8 i9 k& f) m* P9 j6 \% |# _  j
# 基本设置
% x+ D4 k. ?& z( t, Dlocal 0.0.0.0
" L8 v$ W2 L5 Y0 i4 \port 2197. }3 e1 F( [- F1 {1 z8 m
proto tcp
: J1 ~0 E( b. t0 ?9 pdev tun" k8 ^/ u( @1 b+ V9 o
topology subnet
6 \: u! R, E0 S- s! Y
* {: w, G7 l, Q% K% l
5 ]  O* R' w9 D
# MTU/MSSfix 优化,避免 TCP-over-TCP 卡顿和重连1 S% t1 _4 k. z: H/ x
tun-mtu 1450, C' {9 W  C( x3 [) L
mssfix 1410' G+ z- s% z4 e' o8 R4 f/ Z8 e7 s
push "tun-mtu 1450"+ a6 Y. c( Q8 C$ s# X/ f
push "mssfix 1410"+ D5 i3 U* v9 W/ V( C+ w

9 C/ M2 r( V4 t" @1 N

+ [- @8 e  t* X$ p1 j' G# 证书路径
$ X1 J" U3 P1 j3 m7 T! F. n" gca /etc/openvpn/certificate/ca.crt& S+ A5 I3 |) \2 ~" F; v" r
cert /etc/openvpn/certificate/openvpnserver.crt7 U3 Z3 ~/ a! [! z
key /etc/openvpn/certificate/openvpnserver.key/ J: G* w, d- t
dh /etc/openvpn/certificate/dh.pem
" v) J$ Y& A# h0 qtls-auth /etc/openvpn/certificate/ta.key 07 }$ D: H! Z7 S/ |$ {
tls-server$ J6 ]8 |3 n' j2 n# g
' v2 t* I9 h/ A/ {$ I
" W9 p7 b1 C' |  @" {0 v
# VPN 内网网段- z) i- K$ S* \
server 10.10.10.0 255.255.255.03 p# c7 P& u% B4 G6 c% h
ifconfig-pool-persist /var/log/openvpn/ipp.txt$ C& b& X7 _( J5 I. v- ^

: ?/ t% L) N! H$ K

) N5 {- [( ?- _2 F# 内网路由推送
/ S/ h% D& \) s' |push "route 192.168.16.0 255.255.252.0"+ p0 _0 h4 L! P+ Z: k. K% b
push "route 172.30.1.0 255.255.252.0"* D3 W+ z' }2 W9 T1 Z

6 H. H9 a* w9 E5 C8 h3 f' B

: R3 q5 t* C- e8 u# DNS 推送
; i8 u. H4 a4 H) L7 M( c% [! epush "dhcp-option DNS 119.6.6.6"
7 l  t/ ^0 X6 hpush "dhcp-option DNS 119.7.7.7"9 F* x$ c6 \9 L- A0 P* h0 A

$ f6 c: B5 U0 q4 l
6 X8 k# E# T0 d$ ?& C, S  u
# 客户端互通+ E+ M; x' O6 }5 n
client-to-client' ?  J  j1 J" P! Q. I+ o

' H* |7 `  L% e2 f

' n5 P. D1 i$ C" e- b# 保持连接,优化 TCP  P& Z* L, g# n2 R# }: y' y
keepalive 10 60( ?# N  \! K+ f0 ?
tcp-nodelay7 z; U0 p. R! x% a1 s
# m$ U: Q8 ]  Z
; N& ]9 N5 k0 G) v
# 加密和压缩
- P) }- c0 V1 r8 h4 n- h, xcipher AES-256-GCM5 a$ x8 ~* l  k& f
auth SHA256
( [# \" J4 f" s3 ^8 q! Zcompress lz4-v21 C$ F+ W% }; m+ O- \
push "compress lz4-v2"/ w' s, z7 g0 k' t% e

: q0 u2 N$ X  G7 f+ A8 U- [" E& Z

6 X! @' v7 G* i) F1 ]# 客户端数量
, |# E8 K+ O1 a; [, umax-clients 250
( k& J3 B6 Y( g5 q6 b9 ]6 h: ~4 D7 cduplicate-cn   # 如果允许同证书多端连接
" I! }+ L/ U8 }% _1 E
( z6 f* Y2 Z9 f1 S; @: D2 q; f8 \# w

" ~1 ]" J. p/ q( q# 用户权限0 W3 q2 N8 b# d- f  ^
user openvpn
0 L4 {1 |# u# I4 l8 _. B8 _! i% ygroup openvpn1 |# ~, ~2 A. v8 w; j, [2 l/ i
persist-key
; U. V  t1 E, t2 y( W2 [persist-tun, E% w' g+ J4 G: S" S
) N$ k& R, Y% E' ~* ?/ Q  ^- r- F
& a0 J0 {2 T  m# M* N/ O: w' s9 G
# 日志3 U" f1 c+ U+ s9 G! L4 a3 I6 R8 _3 u
status /var/log/openvpn/openvpn-status.log* D3 J, n2 T$ s  Z/ i2 z  W
log-append /var/log/openvpn/openvpn.log9 f1 E: n: K: D7 s- e5 J& c
verb 3
/ B& ^: ?- n& H. n3 W. [6 c, j$ W
1 d" ]& @5 J/ c2 n

! J4 P1 t: Q& a4 y" M0 ]客户端配置 (client.ovpn)( |) O) Q9 H6 r! l/ q# `5 C
client1 z* a7 x9 T) S- j7 Q
dev tun0 }6 n% g! @4 G" [
proto tcp* {2 O- D) t" e7 j$ B$ G/ O
remote 119.99.99.9 2197
2 T6 M+ |( E( V/ Dresolv-retry infinite# @6 z+ n% B; [( N
nobind
; i; D. N, k2 F3 Xremote-cert-tls server
, Q  D2 X# i  D3 q5 I+ B0 f' N/ c' t# ^- J5 p# W
% ]. p* r  b5 O2 B
# 证书! G, Y3 a/ [! W9 _7 x
ca ca.crt; L3 @" B" A. v* Y9 J! h
cert rui.crt/ }) m$ ]% }9 z
key rui.key
7 [: ]# S5 x; U4 `8 o& O/ ?tls-auth ta.key 16 z6 F( h) p! F
! g1 N$ M2 l7 _) O$ u3 `3 E
6 t% z* x3 d4 w, L1 }, o* T4 `
# MTU/MSSfix 同服务端
# H+ Z, i% k; V$ w1 x# Ltun-mtu 1450  F2 I; |4 O* |/ D8 U+ Z% g" X5 D# t4 H1 B
mssfix 1410& R: Z7 z$ x) v5 @' n4 w
3 G; s8 X2 f$ @$ _1 i

4 k/ {/ V9 M: W0 h8 K& p% Y# 加密/压缩一致
+ D) E) i5 o; @4 E. V5 scipher AES-256-GCM! g. w0 ^) u( t
auth SHA256) M3 X. i/ [) E+ I$ u8 D0 Y
compress lz4-v2/ ?( }7 ~. u* u# `) k. l

& _" |" w* C, D$ ^' T) p

1 h! q  ], |6 x, e5 j- q2 P# DNS
& C2 h6 [6 z+ L2 ~dhcp-option DNS 119.6.6.6- S& X4 c( y9 g+ D% O
dhcp-option DNS 119.7.7.7) ^+ L) |5 u& w% h# }
- x" [$ o# ?* ~0 @, Z9 }* |1 F
6 ?, E' m0 H2 k* I4 z, {$ \
# 自动重连优化8 j, ]2 x* l4 m
keepalive 10 60
- D% {2 D1 _; G6 |; Upersist-key
# ?8 k8 a- B. y4 r( Qpersist-tun
1 V, L% O% o' L$ y/ ]( rremote-random
5 C' x4 Y0 @' u2 |. l* U; u) |tcp-nodelay
8 @* E. H* l% ?, K# S1 uresolv-retry infinite
( n6 i% ?7 l  a6 B& i- j: ]2 ^& @1 W  j! N4 F6 u" X0 @

' \4 T& c% z9 P1 S& z; F: j5 \7 R# 日志和调试  {5 J& D- b2 W, b' @
verb 3; U. ^$ Z6 ]8 F& i% p( |: B
; }4 l" \7 E- e
' x9 r6 y8 c5 ~7 Q( q

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:09:01 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
3 C+ c# [. P  @' d4 K' |. R" f; e* J, v# l% u
代码语言:javascript代码运行次数:0
6 c1 r8 d" D4 c* Q5 |运行$ B5 |$ l. v1 I1 }* r0 E& x
AI代码解释  t! u- I( C2 N: Z. K
yum -y update
" x9 y2 c4 \* c- I9 J9 X8 M虽然也是可以不进行更新直接安装。
  d% X3 {5 \( h- {/ f+ D0 `6 N/ J$ k2 y$ X: j' N
安装 OpenVPN 和 EasyRSA
8 K7 F0 U1 {6 p+ z# J
1 c& {2 Y* i0 e' G- U4 M安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA1 T( b& m7 U% N; K$ Q$ u
. R: s7 \& z: {' o6 \8 U
代码语言:javascript代码运行次数:0
7 u) C6 d3 s( E  F- }) H运行6 A% r: C, i! n1 i" ~9 L( z+ M
AI代码解释' Z7 K) X6 @; t4 o' A
yum -y install openvpn easy-rsa firewalld
6 }/ k, \  x) y5 }9 U0 q如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
% e; A1 u/ n# ]. O
7 p. s% f( G& n& l3 E, G代码语言:javascript代码运行次数:0" F! v' P; F0 h! e, X7 n3 ^- v( ^
运行
$ y" B2 v8 p/ a& OAI代码解释
: ^/ X* E6 I# X4 `. Fyum install epel-release -y  Z, X6 A7 T4 g+ }( Z( a5 {
生成 CA 证书、服务端密钥与共享密钥$ ], k% Q) \  Z% m+ Q$ e7 B. G

- u- j# @; R: I4 r3 U+ u7 x这里步骤比较多。
, a; n, D! P+ @: ~% _( ?% y
% g8 x; P. d0 q2 @1 X7 l. z首先需要初始化 PKI
, J9 [( l$ B( @8 f5 w& |- |
! m5 \9 `  N( \" o代码语言:javascript代码运行次数:0
/ g% h! q4 I5 Z' e运行1 p$ y& c* C) \# E. `! G$ M
AI代码解释" x( R. p" Z/ _: z1 v& W5 e
cd ~; b3 [& P4 i  G) e
/usr/share/easy-rsa/3/easyrsa init-pki
9 s$ P% }8 A* n3 E接下来是生成 CA 证书
* ?# F/ P3 S5 P; u6 ~  i1 l3 f; x( Y1 k) N
代码语言:javascript代码运行次数:03 a9 \6 A0 V6 ?: r
运行
1 h) c# ~7 R, i: qAI代码解释0 m) [! e( d# N: _6 J; [
/usr/share/easy-rsa/3/easyrsa build-ca nopass# K8 D* j! V2 ^. k/ `. d2 ~
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。* i# f+ J+ ?$ _4 c8 |# G/ P$ S

+ }- T' L8 ^, f- G' e再来是生成交互密钥
3 _/ @- M3 Y& C1 b( n0 Y
, i) |7 @& U3 P1 l* f1 _代码语言:javascript代码运行次数:0
( B" O5 ~) \: ^6 T运行
$ @: J) n& ^$ s) WAI代码解释/ N" d' b: ?; G/ S
/usr/share/easy-rsa/3/easyrsa gen-dh( J4 e. r5 I% C$ R2 ?
开始生成服务端密钥; c  m/ v5 R; n- a2 \- k: k+ |

5 X/ @6 t7 _* q3 m2 u代码语言:javascript代码运行次数:03 z' ?0 k- \7 @' v$ n
运行( X9 ~3 x- S  i8 S9 y' a
AI代码解释2 k( H4 k7 ^8 q* B
/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass
" u2 _# K/ |3 N8 g2 P+ S" Z接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥; R1 ?4 d; S8 S* F
3 \1 `$ j- n( d% I* ?7 Y+ i5 O9 [
代码语言:javascript代码运行次数:0) ]5 E; j9 e; w! T  l  X, _/ s0 e
运行8 X7 O$ W2 y6 M
AI代码解释
; x1 f# K1 |1 L2 y/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass
# s0 i% I: [# }% T' w% p6 s最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过$ q5 @4 u/ F: \9 q

; V0 H3 s6 H1 [  A) F代码语言:javascript代码运行次数:03 A0 u! _4 {( N, E+ Q
运行
9 h# `  v6 @  i/ _& y/ PAI代码解释+ O& T# T. n( h& Q# U
/usr/share/easy-rsa/3/easyrsa gen-crl1 b4 i, Z$ q- o6 D8 l
其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥: i2 V4 Z2 ^# f6 Z6 R: I

! a8 v0 W+ M7 V5 p代码语言:javascript代码运行次数:0
8 N0 s# W1 O" d( A  X运行9 E3 c3 r' i5 P( ]0 q. C  s- Q
AI代码解释' s2 _' {$ N9 ]
openvpn --genkey --secret pki/ta.key- B" Z* E8 u  I- p6 W
在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径): O( [  a% K4 u; O
. `8 b( e4 U& s( T. k" Y. W
代码语言:javascript代码运行次数:0, Z" I: ?3 z- c6 \$ I' s) d
运行
8 u" L/ {) `; Y2 \/ nAI代码解释% g3 {3 u5 G  n3 \2 B
cp pki/ca.crt /etc/openvpn/ca.crt
( Z. J) ^2 C+ g" ~/ o4 K6 Pcp pki/dh.pem /etc/openvpn/dh.pem7 ~/ h. w* F/ f2 `
cp pki/issued/vpn-server.crt /etc/openvpn/server.crt
0 \2 ~, y" f# U  G% h% m- Ycp pki/private/vpn-server.key /etc/openvpn/server.key
. o, B8 x, c& ~2 U3 }4 Q; K/ ]- mcp pki/ta.key /etc/openvpn/ta.key
7 O+ e3 z( ?! g/ f6 t6 Ucp pki/crl.pem /etc/openvpn/crl.pem2 I: x5 l  f& h9 d! N% C  m. a, ]
配置服务端
. U7 Z7 B$ _) P8 b* M( H2 i) x2 s! A" v5 ~5 `1 j
OpenVPN 配置文件有许多可定制化,具体请查阅官方文档。
: ~( \8 R- P) o! s) t9 Y! K! D7 J1 ~( L/ @1 e6 B- d1 G9 a
代码语言:javascript代码运行次数:0
! ^) ^& R/ Y1 [5 Z运行
1 t- t0 g5 a+ A3 S# ~6 ^4 n) LAI代码解释9 u0 d" y$ }6 }
cd /etc/openvpn
& w; v1 W! w4 p+ B* rvim server.conf! q+ l4 |3 Z9 ?/ ]9 T- c) J
将以下内容粘贴进去
) b) M. Y+ D" z) |7 H2 f8 n
, E6 z( t1 L0 K- ]$ ]0 o代码语言:javascript代码运行次数:0
4 j% U& J% B' c9 S1 i0 {运行
* `2 S8 a$ Z6 c. `2 i3 l+ L1 c7 K/ N3 xAI代码解释
1 D' C9 F$ q0 S$ U# Secure OpenVPN Server Config. {7 p$ R9 E6 u+ |2 r/ e6 [2 U' S' }
# Basic Connection Config
2 K! K% y+ f6 Pdev tun
* {4 P% A6 y7 c) W; f) Dproto udp
3 _, {* ?, X7 T2 tport 1194( ?/ i9 `; t' D% c8 i; L0 Q
keepalive 10 120: a( u8 L* R0 [: g
max-clients 5
( ]9 V4 l* ?; r# P9 J3 @# Certs( y1 b7 t/ C; ]& p# h% Y; }. e3 P
ca ca.crt# [  Z. G2 z: W0 d8 }2 i! H
cert server.crt
: J$ a6 l8 ]' o4 ]key server.key
0 i) }0 y' }" `; udh dh.pem% c" E/ D  e# a4 o" s% M' |' O
tls-auth ta.key 0
# G6 n5 S( r/ m: y# Ciphers and Hardening
, w$ n4 A; b1 x$ x& ireneg-sec 0( x( B0 N5 S5 U! S# B+ A) U& R
remote-cert-tls client
; Z5 S0 D, A) X- P# g( Ccrl-verify crl.pem5 d* ]$ {! V- y' K. `
tls-version-min 1.2, f7 y2 h' R+ n0 g8 q
cipher AES-256-CBC
/ ~* \$ u0 h8 b' O  Tauth SHA512
2 l) R% [& R# [( Q: J7 S8 Ftls-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$ U' p2 P. D# f5 _6 W
# Drop Privs5 v& r+ p6 `- g+ O+ X6 f& M1 z
user nobody
* I2 c' Y2 J6 Y0 P9 P* ?* o# B* C  Tgroup nobody0 j: Y" M1 o9 z1 U" [( Q
# IP pool
( d, v3 D3 Q6 lserver 172.31.100.0 255.255.255.0* B$ b2 M, }! V
topology subnet
8 K- B! ]5 B1 M: M: I" D7 oifconfig-pool-persist ipp.txt
# D% [4 _# r# C. ?) E. o) fclient-config-dir client
) L+ L  y; A9 |- [# Misc
% z3 x& r. Z, h* [persist-key
* `* t4 y4 m4 m) w9 [7 z( Cpersist-tun* h' U# ?. ?% o2 A7 ^& g( ~: o
comp-lzo! V  Q9 P6 v/ E% H9 O* E2 M3 l
# DHCP Push options force all traffic through VPN and sets DNS servers& ]$ m% p: o" k+ `: z
push "redirect-gateway def1 bypass-dhcp"
. {' ?- M' @  f$ a6 t  lpush "dhcp-option DNS 8.8.8.8"
# V. g& y. u6 o6 T  fpush "dhcp-option DNS 8.8.4.4"2 x0 B8 H2 B6 w6 B) p( U7 |
# Logging
* e. x% j* y; v5 o# ~7 v3 [0 M* }% glog-append /var/log/openvpn.log6 ^2 J) |+ {3 ~, Q; {
verb 3# {! m* ?7 f0 P9 a
启动服务端并让其开机自动启动
' A3 \& K% C/ N, Q5 X* N) T
) \% @& @  N" [5 J; _/ G代码语言:javascript代码运行次数:0$ u$ S% N2 V! y! w* z3 i6 s! v
运行
" m* X4 O0 O6 C& O" XAI代码解释# P& Z/ j6 H& S0 F
systemctl start openvpn@server' [+ M/ s. w5 S4 C# U* @8 i
systemctl enable openvpn@server' H; a' t( `7 D/ {
配置防火墙与流量转发
/ \6 m- O0 b6 }8 |8 ^/ K, L2 J  e( O% h
放行 OpenVPN 入网流量与开启 IP 伪装
  B+ b3 {: I+ I/ O/ z/ N1 m- ?/ W# Y4 ?' r" n6 k9 b+ T* n
代码语言:javascript代码运行次数:0! u8 g- ?8 Q( o( s
运行  [) X# n2 H4 J, e9 K
AI代码解释
* g! J; {/ G$ s3 {& g7 Z7 Ufirewall-cmd --permanent --add-service openvpn
0 m6 a+ E3 K8 p) z+ A; }1 Vfirewall-cmd --permanent --add-masquerade
3 Y! r9 |! _; _* n$ [firewall-cmd --reload
1 m8 m5 w) i! }0 T# ~检查是否开启流量转发! t4 [: C5 a+ ?! j+ B

4 s% e& U. [7 h- ?代码语言:javascript代码运行次数:0, B" ]7 \" b- x; q- {
运行
& l/ o* U1 q: @0 O& c5 _AI代码解释9 o; I7 I! u3 T4 u: S. u7 L
sysctl -a | grep net.ipv4.ip_forward
  W' L6 A" ~1 u( K. F9 m- F确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下- R4 n/ h- v$ M/ d' G
# s# I0 X' Q7 y0 h9 W/ b  z$ X% W
代码语言:javascript代码运行次数:04 |' T3 }6 g5 G
运行* \) a) b& s/ V* n$ }
AI代码解释* J! M7 k+ f' Z0 @
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf% X9 D/ B/ s, J
sysctl -p- ]: P; g% ~- t+ n
配置客户端
5 g& S/ N: f( V3 l  E  @6 L* [/ v
0 e% D' M+ M& l% |客户端需要拷贝以下文件7 _6 K" L+ i& Z4 D& t7 [

  ?& K$ s2 O% p* C8 t) t$ c代码语言:javascript代码运行次数:09 x9 ?. q, U4 i3 @
运行
. C+ T+ Z* k+ lAI代码解释
3 C2 b' G8 S* h6 b& Z; q+ Qcd ~
2 D* ^  R4 z1 T1 y1 F% J; b4 Zmkdir vpn-client-01-config# F! w* |% Z9 Z& _) y" ?
cp pki/ca.crt vpn-client-01-config/ca.crt
' H& a- S# A  `' {cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt
: K! C9 B6 v0 u& Rcp pki/private/vpn-client-01.key vpn-client-01-config/client.key! p2 ^% A  K/ e6 G7 Y( H$ }
cp pki/ta.key vpn-client-01-config/ta.key
; l+ W' }! d" |5 `* Z最后vim vpn-client-01-config/client.ovpn并粘贴下面内容7 J( ~) e$ v9 r' S
4 D: C3 s) L' S+ V: g6 R9 O; l
代码语言:javascript代码运行次数:0
5 D+ `% k# k/ K; |运行
1 P% F1 t7 G6 W( E4 |- SAI代码解释2 ]/ i: S8 L# Q- u5 Q
# Secure OpenVPN Client Config, X3 s# r( p1 B2 }2 ]+ o: |: b
#viscosity dns full
0 Q! G- d  f& [# l# P#viscosity usepeerdns true1 F" A- O' `; B1 {: b- m6 R
#viscosity dhcp true
+ F1 }$ m7 G$ O# M' w  K+ U( k! L, ctls-client
5 w9 g; |# s  {pull
3 U; L+ v& D# [7 ?) _' dclient
0 Y6 G& R( ^3 `$ |8 [% L7 idev tun& ?8 |: L1 a7 c% v
proto udp) r1 z5 p0 X( l& l" B" [6 l/ S0 G
remote 123.123.123.123 11948 h) }% q# h4 N3 H
redirect-gateway def1
3 h3 ?5 q: v* A, B# fnobind
2 K9 ~; A! V3 m/ L$ K% _persist-key, |$ {) ]) d7 n  a6 O1 X
persist-tun
! T8 g! a. e* j4 [7 w6 zcomp-lzo* N' E2 q& ?% K6 b( Z! ^! |
verb 3
! ^' s* z) e% z  O: xca ca.crt
3 V9 ?! w5 g& y# b7 W" Ocert client.crt/ [9 Q1 W/ b6 ]
key client.key* b. X0 Q3 \" H1 K4 j- [7 \
tls-auth ta.key 1
, P0 [. J7 m/ W3 O* n" q0 |  j: [remote-cert-tls server
7 G( [/ y. z7 F+ t4 j9 M9 fns-cert-type server- y7 q6 f: e7 q# x. o
key-direction 1
# D6 `/ F  z; ^; Pcipher AES-256-CBC
2 t% O2 n9 o& n5 W" n+ H) q6 ctls-version-min 1.2; T: v: f2 i( b8 x- D
auth SHA512
$ C$ \3 L. V# Z+ i; z1 s; v2 R. utls-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
2 ^' ~" D2 Q# q/ }8 W4 j- J  b5 J+ n3 r5 z, L$ w
remote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。
. S; {4 z+ _; x

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-6 23:24:01 | 显示全部楼层
调整压缩设置:启用压缩可以减少数据量,但可能会增加 CPU 的使用率。在配置文件中,你可以启用 LZO 压缩:
+ m! R% @8 j/ z% ?  L  d1 |) v) ]( U$ v6 ^. u8 ]9 x
comp-lzo

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-16 14:23:56 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包  `- f4 U' T4 ?7 q2 ~5 u
) p$ f8 H& o) E) l! D. p
代码语言:javascript代码运行次数:0
1 V( |. v9 O3 p  T# y, ~9 n运行
7 y5 K4 f3 S+ J( H* j- \, x" h3 _8 KAI代码解释
2 H  r- K; @1 ]3 I  a* k' M5 [yum -y update- |8 ]' O; A( ?) n
虽然也是可以不进行更新直接安装。
" z& C( p. i% v) m7 k% q- N
8 w6 f; x- n, D安装 OpenVPN 和 EasyRSA4 F. U6 T& z: m+ I( j

, b" @5 L( ^  c! O/ a- C' l- M安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
# \3 g  \# V7 |
' p( G* ~$ Y2 f" ^' s$ I% C代码语言:javascript代码运行次数:03 V* E0 b; |# l8 {+ a4 [% d
运行+ p. e+ D- q1 r
AI代码解释
# k2 J6 ~) l/ u( y0 N2 r: |yum -y install openvpn easy-rsa firewalld
8 x  S: g3 K3 i5 V8 D% x# j如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
! m: D1 ~- l6 a! G2 v) g+ R6 a* e3 [, x1 ^6 R8 m9 a0 V7 S, j
代码语言:javascript代码运行次数:0
& |$ J( n! \$ n, }* x- u/ a$ [运行
1 O3 ]# E: a! hAI代码解释+ p. P4 |6 _/ p
yum install epel-release -y6 F& w- X+ J6 Q  J
生成 CA 证书、服务端密钥与共享密钥% w+ e- a! K9 G6 Y2 a, j

! ~# F& i/ B8 O0 v9 D' e$ z这里步骤比较多。
% I. Q6 n+ }! V! }9 t* x. o  D; O$ H/ [1 O7 q
首先需要初始化 PKI8 G' ]! n  l  P& F8 C4 O
) ~- O; C9 }, Z1 Z9 M# m
代码语言:javascript代码运行次数:0' W# |4 }+ [, c( ~; I( j. `
运行
+ c& |: J' H" NAI代码解释- j% k5 r& W% p+ x2 U! D! O
cd ~9 z, ~. `/ j, H  j% r$ B4 ?: e
/usr/share/easy-rsa/3/easyrsa init-pki
1 G8 |) |% a; V; O" c1 r接下来是生成 CA 证书: m! |5 R8 ^9 Q! A& C" {

/ t% a- C$ O! x( T4 m; v代码语言:javascript代码运行次数:0; k5 `+ f/ R9 I
运行% |3 r" @9 k( c
AI代码解释
  }7 B" G5 a6 _( S0 |% l/usr/share/easy-rsa/3/easyrsa build-ca nopass0 f% w" \9 C4 ]3 X
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。0 K- m6 ]* p! Z

' ]$ A2 h' d+ t再来是生成交互密钥$ k! y% {; h# [8 {# b, @. g9 p$ Z. T

" ]: `8 h% t9 {! C& u: c9 j5 c7 n代码语言:javascript代码运行次数:00 p0 V; `& ]+ _/ R* g: a; Y
运行
; r" E6 T& c( a/ W% [$ f' A% kAI代码解释
. Q& r% s9 T9 |3 I3 _* [/ P/usr/share/easy-rsa/3/easyrsa gen-dh
2 G2 z/ @( b* X* b1 _9 J/ m% e开始生成服务端密钥0 [( N. z% |" `

/ }; G+ Z; r. }% Q代码语言:javascript代码运行次数:0
8 w3 k9 o9 g" ?: ~6 P9 |$ ^6 ]5 n- `/ m$ T运行
2 d* Z" W7 a- _9 }; t+ W: _( Y2 |" l0 oAI代码解释
4 F$ K8 O& z  @+ E* t3 w% Q: k/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass
% s. W/ R+ L3 V2 I: e# m接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥+ I! L/ T6 U) [. i
  v$ r& |: b0 U+ ?# k
代码语言:javascript代码运行次数:0
* q1 h7 x6 [1 u! x3 c运行
& y3 r3 z/ X6 T& xAI代码解释$ V. Z% {6 `6 k
/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass" n" V0 M" |6 i5 X4 J
最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过# G0 h3 p; s( f7 w7 ^( F9 ]
' c$ A# F5 Z3 l
代码语言:javascript代码运行次数:0
& p) a, S% x) U! d4 ]2 P- X运行
; e3 i3 ~) n- e; @/ oAI代码解释( `, O: t7 @/ F/ @3 ?! j" Y
/usr/share/easy-rsa/3/easyrsa gen-crl
6 P( D) a) P1 D! T/ f8 v其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥
" }$ L! J+ ?. ]  |, b( E+ N2 E" s9 G5 `7 l/ B3 T
代码语言:javascript代码运行次数:0
- f8 I8 }/ `7 X" ?+ O/ B, G运行
0 [7 }! e2 y, Z; j8 E/ SAI代码解释
* q- k+ h- T4 c: Popenvpn --genkey --secret pki/ta.key
( i2 r( Z$ J8 i+ t+ h在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)0 \4 q: o8 D# r8 L
" G; k/ d2 b6 p- g) l! o
代码语言:javascript代码运行次数:0
% ]7 }' k# ?6 K: q7 N' }9 j" G运行, g# `1 F2 c3 y8 c% V
AI代码解释
$ m% h3 N, v+ B5 `cp pki/ca.crt /etc/openvpn/ca.crt$ N0 v6 r3 e. v9 B( N1 R
cp pki/dh.pem /etc/openvpn/dh.pem
+ U7 E) Z6 X: N6 \  ^! ]cp pki/issued/vpn-server.crt /etc/openvpn/server.crt
4 W& D' D- ~* j# Vcp pki/private/vpn-server.key /etc/openvpn/server.key* i, n5 k* ~5 g+ l2 R
cp pki/ta.key /etc/openvpn/ta.key
: L9 H! M8 i3 |4 A9 \9 |cp pki/crl.pem /etc/openvpn/crl.pem; E- A/ d  f. A5 Z! A
配置服务端
2 N$ X4 g: H$ v  ?1 L
# k7 x5 F+ A' z( y, y) Q% jOpenVPN 配置文件有许多可定制化,具体请查阅官方文档。
2 X. i3 y: E* o. r6 h; L2 i1 I  ?4 U' K. G1 X+ M4 g  f9 \) U
代码语言:javascript代码运行次数:02 Q7 u9 W0 D, g6 ]/ n  l
运行0 K3 Q, v; G2 m/ n8 x3 @
AI代码解释! A/ _# J) v0 G, e$ R! U; p
cd /etc/openvpn: z* a! P$ ?. I0 U3 d, C
vim server.conf4 W! N4 D( g& p0 N: t6 [5 O% N
将以下内容粘贴进去
4 R) A5 x8 t, Q/ z: W- _2 x$ J3 K: P0 }
代码语言:javascript代码运行次数:09 {, _2 i+ W- Z4 ?- Q# o6 c
运行
. `5 Z; I% v- q+ m8 f; \8 b( rAI代码解释
3 D+ l6 a# m/ n2 G! |# Secure OpenVPN Server Config! {- U' H* s4 G# F+ B$ d
# Basic Connection Config/ j$ p: ]( L3 f4 a  f$ N5 B4 c6 o
dev tun& V8 z  P! @6 h* O" P
proto udp! E9 w7 U" m( U, O8 E" r
port 1194
2 I5 R) @* e* h4 o7 k) nkeepalive 10 120
! F* W: T0 z# w: e! C2 T& Mmax-clients 51 t7 y% w' S$ k1 {! \9 u) }
# Certs8 N% n0 V8 f4 K" c# S
ca ca.crt$ O0 ]) r" h5 \  n+ ]1 S4 E
cert server.crt) n3 b  W% c. S4 \3 o
key server.key
, D2 G; p' A" J& sdh dh.pem
9 p3 V1 Z4 f/ p0 V( t$ c6 ctls-auth ta.key 0
# Y" o4 g6 y. R# Ciphers and Hardening% {: w/ |$ F% o3 _2 `. k. J+ @, ]
reneg-sec 0/ Y7 F. T$ n( N* X
remote-cert-tls client5 X: [. Y7 s8 p, K8 U
crl-verify crl.pem- ]: l3 {/ E7 a& Z+ b0 @
tls-version-min 1.28 C# e4 B/ s: K( U+ T$ B
cipher AES-256-CBC: p. f+ Z* {9 ~# R
auth SHA512) t! L, f0 \: Z+ y4 A
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-SHA2565 i6 ?" z9 e% F" T! |4 {5 e
# Drop Privs
5 d" i2 Z8 s9 s! T) E6 F! U3 Suser nobody
- g; l% Z& J# t2 |9 j9 `8 ngroup nobody7 M8 ?( K8 ]- c- h$ C& \. l7 q
# IP pool
! p# N* I3 ?+ e. V( J" @server 172.31.100.0 255.255.255.0
) Z1 Y  o& g! U: }5 G' Ztopology subnet( c4 q( p8 j! c8 g' A
ifconfig-pool-persist ipp.txt3 Z7 J( S6 G+ W; m9 ]* m7 u
client-config-dir client
7 ~  j! m, X/ O4 m$ |' g2 d# Misc
6 S% l1 d. K6 r" K" |persist-key4 L! E5 T' f# f3 v# r5 L& ?+ q! j
persist-tun) Q& }( H/ b1 C* X# j
comp-lzo
; j6 t, r3 f4 W1 W# DHCP Push options force all traffic through VPN and sets DNS servers
/ N1 x  ^# k0 L+ M" J4 Ypush "redirect-gateway def1 bypass-dhcp"
4 K6 e( ]7 l) R: Q5 e$ U; Ipush "dhcp-option DNS 8.8.8.8") y1 E. a7 j2 H2 x
push "dhcp-option DNS 8.8.4.4"( u% w/ [' c0 A( f7 r) V; Y* U
# Logging
" t( A  z, d- }- s8 S' ulog-append /var/log/openvpn.log
' a' O, {' t% C% Qverb 3
# t' O3 ~2 ^. b6 o0 o- I启动服务端并让其开机自动启动( a5 ?3 T+ l6 J- ^6 k3 z0 Z5 |
, Y1 S! h# t- ?; G6 G
代码语言:javascript代码运行次数:06 r9 S, U, L; I) f2 U# Q
运行
0 j$ V. H% i5 b! l. @AI代码解释
. t  M; ]; ]! Y& S& x! Zsystemctl start openvpn@server
3 b. ?2 o& s. e( \) B1 ?systemctl enable openvpn@server
$ u/ R8 K0 O: c8 j配置防火墙与流量转发" }6 \" Y" |" _6 s; a2 B: B5 E
  x) j: I% @5 y( @1 o: }0 Y  T1 f
放行 OpenVPN 入网流量与开启 IP 伪装" Y0 o+ p% E! E+ E* k' ]3 ?

. v3 o. l2 }" S) N3 |代码语言:javascript代码运行次数:0
2 T2 P+ I/ \% q& x$ M运行+ }6 L. `/ B+ d1 e
AI代码解释
! E$ B3 j# g& m4 e. y5 m" @8 q) @$ xfirewall-cmd --permanent --add-service openvpn" q1 _. u: `: ]. m
firewall-cmd --permanent --add-masquerade
, n, ^4 s- |+ s! b& \% ]firewall-cmd --reload
2 [  Z; V" j! G" I4 \, T5 w检查是否开启流量转发: A- S5 p7 r( j# p

' x3 S; p, ^5 A, }: v0 {代码语言:javascript代码运行次数:0
& ~, m% }1 C# n( u运行
: n% Y- ?. M& U/ O& h( zAI代码解释# c9 m3 z$ |1 L
sysctl -a | grep net.ipv4.ip_forward; h9 m3 {) q; S/ T5 j! [& P
确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下
; Y0 m4 U/ e+ U( F# a+ x
7 H' i) l+ |" `/ h+ w; Y& V代码语言:javascript代码运行次数:0
0 l% N( Z7 i( r+ l运行7 C. U2 W' e" M
AI代码解释
3 i; h3 s* x: j+ _# `9 xecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf3 s9 \) p/ y" L" [4 K
sysctl -p
# J4 W+ t2 F0 A$ ]- S配置客户端
0 G- v0 {, x# a' O* Z/ n0 d+ l
: h- M- r. q  |9 `. ~2 k% d客户端需要拷贝以下文件/ c. P" f. Y3 q6 {( d5 `9 c

5 j! A" T! t% Q* L代码语言:javascript代码运行次数:0
+ \( |- @$ F& V: j3 O. h运行4 \" @8 |$ l0 P7 I0 G
AI代码解释" U" l1 r" Q: g! I
cd ~3 f5 ]% s  K) |+ H5 r
mkdir vpn-client-01-config% ^8 b7 q7 g) V
cp pki/ca.crt vpn-client-01-config/ca.crt3 }2 q/ Z; O9 B4 u$ D
cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt+ \, B+ }6 x; i; p/ t
cp pki/private/vpn-client-01.key vpn-client-01-config/client.key
2 ]& k" @; {2 D8 F4 F( \cp pki/ta.key vpn-client-01-config/ta.key, _" n) h; B. j' ~  d- M
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容
; q, o: X' N2 \, c" A( D1 u
) b2 Y- }0 z7 J7 \代码语言:javascript代码运行次数:0
9 q2 D" S- L7 m7 t运行
/ n0 H# u! |5 Q# y7 ~9 |AI代码解释
5 _! @4 u; U' [# Secure OpenVPN Client Config, Q. L" s. {2 e* _
#viscosity dns full3 ~, o. B& D' H1 C9 o
#viscosity usepeerdns true
1 B5 y3 f# ?# l# P4 u. m7 w- Z#viscosity dhcp true' K+ c2 D/ M) c. }
tls-client
+ i$ \; X* E  w' q0 bpull
" {# A% o/ G* {. @! |5 A! S- Rclient8 }, F! t' W& s  J7 p
dev tun: c% D  f* I. {. v
proto udp
& U8 H$ Q, x$ [- k* b: `& vremote 123.123.123.123 1194
( Q# j$ a% x( ]2 B4 sredirect-gateway def1
4 T: H. ]9 E; g" c9 @nobind
2 z0 f) p* q! S3 Q, {# T, X3 ]4 I) O3 Epersist-key. u: S+ A; `1 p) H  d
persist-tun
5 Y; k" T* j. d* |8 W- H8 o, Xcomp-lzo9 ^  H5 X' t* E' T
verb 3% l3 N7 h: r5 X
ca ca.crt
0 x' k6 B7 W4 `5 `; x$ ~cert client.crt
8 m! s! n: d+ U% {) y; t" s' bkey client.key: C: `' W% K( {8 J/ j, n5 `
tls-auth ta.key 1
7 X) `' g, t' q+ dremote-cert-tls server
8 @: {' F- L/ e% s7 dns-cert-type server
8 @% M1 t* E( r, g. G3 t! e6 E3 c! Jkey-direction 1
, G) u2 o% \' E1 p2 H* I2 r) k: Ecipher AES-256-CBC& ^) ~6 A# L1 t2 C# u; i
tls-version-min 1.2  d7 u6 h- {: r# d% b  M+ `
auth SHA512
5 }) B! C% @: a) dtls-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# Z  B- q7 x3 y: F% P/ K
remote后面填写服务端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 01:46 , Processed in 0.025905 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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