找回密码
 注册
查看: 202|回复: 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"; [: D, h( S2 ]) f, i$ O4 p. E8 d$ H
#!/bin/sh
* \, x' y/ @5 n/ W' V8 N% n% l1 E###########################################################' r; l+ F+ i2 _1 J! y! o
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>$ |1 }- G+ n2 M9 F1 a# m; t
#) [9 i7 m8 o& v+ R; p. F
# This script will authenticate OpenVPN users against' J$ T! Q6 X' I
# a plain text file. The passfile should simply contain
$ L+ m  U1 F/ B# R# one row per user with the username first followed by
3 T! T: E. O5 J/ z( f# one or more space(s) or tab(s) and then the password.1 J' Q0 A" v; z
PASSFILE="/etc/openvpn/psw-file"
( b; c8 l! u0 ~1 uLOG_FILE="/var/log/openvpn-password.log"9 P1 y) i4 W* l) ^5 r* ^+ E
TIME_STAMP=`date "+%Y-%m-%d %T"`
, O# O* w( y) L. {; ]: M% y* @###########################################################8 p" I& {" x% X6 d6 Q6 _
if [ ! -r "${PASSFILE}" ]; then0 o1 n9 M9 C% C- X6 z
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}0 m9 T1 D9 H6 Z+ z4 s1 o& d
exit 1# N; c  H6 a: c& N5 n
fi. L: e& z, y/ r' Z( U9 S
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`$ D4 W5 U. x" y
if [ "${CORRECT_PASSWORD}" = "" ]; then* R2 j- l5 u+ g3 Q
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}& M- p3 F0 f! c' i# K( y
exit 1! g8 r0 c0 U% b, A
fi
" }( D+ Z$ ~4 U* Vif [ "${password}" = "${CORRECT_PASSWORD}" ]; then" l' f( G* U7 P8 n+ f2 ~
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
# _* D& M! J$ p$ p, ?: Iexit 0
5 q. d! r3 [; V/ afi
( i% F. |& D6 }2 o9 U' Yecho "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}# O. m7 p$ W4 z" N  i7 e5 t
exit 1
; M. V9 z6 Y- H5 I9 l% ~EOF' I/ T5 Z6 _: k. t* j
+ u3 l  r8 K( ]% F3 |: l
chmod +x /etc/openvpn/checkpsw.sh5 r0 k' ]! c7 d
systemctl stop firewalld
* q: M9 B8 e8 t2 I2 z% rsystemctl disable firewalld
' ]) d' N! f( f9 ~3 \' tsed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
$ q$ m6 K/ Q2 G% E0 lsetenforce 05 R7 R5 N9 a% M$ S3 q- |3 g8 y7 i
systemctl start iptables
( Z  l- g) y9 ?# I! K, Osystemctl enable iptables
1 D0 r/ G1 G  |: W5 d" {8 u% r& ]iptables -F
6 M; C9 t) v( v5 ]& x9 w+ X2 h* _iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE: Y# c1 P0 t9 u& Q* K
service iptables save  T$ k7 _! E2 k6 V0 g  {9 w4 i+ {
systemctl restart iptables* d  m6 y8 p0 @. W4 E# F' a9 l. w
echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
$ e1 N9 I3 L$ D" a1 [! s* o5 Hsysctl -p
6 J: K4 b! V* O! ?6 N0 Msystemctl start openvpn@server
+ ?6 K/ ^  x& V, `- {+ k+ S8 wsystemctl enable openvpn@server
$ K9 r  [/ _  v. i1 ?' Osystemctl status openvpn@server
. a: l! h1 {3 d. F/ o. P8 S% y
# S3 _' B* z% @7 ?* W/ z% B) Secho ''>/etc/openvpn/openvpn.sh
# J1 M9 j: U3 |7 s; k2 @touch /etc/openvpn/openvpn.sh
# H* f1 N* n5 D4 P+ ~1 C- G0 Xcat > /etc/openvpn/openvpn.sh <<"EOF"
" d# w' G; |* G1 B2 O#!/bin/bash
( \3 K2 e2 K# i% H- u#by openvpn useradd; w6 ?3 j8 b+ M' w" l$ a  W& z* O# c7 D
#name LLL 2022年02月23日13:48:550 M' [$ M5 y5 @) Q
###########################################
- |8 T4 A, x0 g3 g. V" z#user="$1"9 S% N1 I" H% n1 E5 m' R* |5 m; G
#pass="$2"' F$ }6 D+ o* ]0 J
#ip="$3"
0 n! w% N5 `/ B8 h7 }easyrsa="/etc/openvpn/easy-rsa/3.0.8"
# i% I4 b2 u+ r% nfunction useradd(){
* z+ B$ ^# ?4 }/ bread -p "请输入用户名:" user
+ O- x( k; y% t* \* d  \if [ ! $user ];then
& ]8 R( ?: T8 _! Techo "user is NULL"
8 Z) j- ]+ J; U, kread -p "请输入用户名:" user
7 R4 p, Q1 t7 O% ~/ G7 Ifi
: b, H4 [! t8 K) p* V6 ~  `8 {read -p "请输入密码:" pass
$ s$ R; h( j/ s! V0 s. `! a6 Pif [ ! $pass ];then
" {; B& G, B6 V  o+ cecho "password is NULL"
) P! F, Z% T4 @2 L3 bexit
: E2 a& i; i# Mfi
# h. h, L( t7 Hread -p "请输入IP地址(如:10.9.0.6 10.9.0.5,IP地址以4个为单位增加):" ip
3 P4 F5 @8 b' P# _- _if [ ! $ip ];then
0 L! Y) h! p2 W6 n4 Gecho "ip is NULL"
3 \, |2 K' {6 {& k" h5 ^5 fexit
/ k8 ^% Q7 d2 ^; F- w8 Afi6 g% e1 H( K: R2 L7 p/ g8 D- r
sh /etc/openvpn/client/ovpn_user.sh $user2 y# }% [; q- u, E
cat>>/etc/openvpn/ccd/$user<<eof
* z  R  b& S/ P4 l! Y! ?ifconfig-push $ip( D: G& {0 ]; j  ~) {% Y% G7 q
eof  n: y/ n+ Y% |) K/ [% Q1 F
cat>>/etc/openvpn/psw-file<<eof
9 o7 E. C& ~1 ~9 j5 V" H  K, D) K$user $pass
0 P, j; ~! E! @, A) r9 O( Deof1 J2 B  {& S" r9 q3 X5 Z
}
; b  l  Z  a+ a3 _* @function userdel(){
6 W0 M4 u5 ~* X/ l/ s- F. ~read -p "请输入您需要删除的用户名:" user
5 ~. b) H1 f* v& @; q' G, Jif [ ! $user ];then1 W/ S) B. D" h& g* j
echo "user is NULL"3 V, u# e1 Y& K' D+ j
fi) \9 t1 A3 L" O$ k9 k  K
cd $easyrsa
, D4 K9 k( w4 Z! {4 Necho "-----------------------------------------------------------------"
# ]8 }: ~8 e! u- A  J( Mecho "出现continue with revocation请输入yes"
% S# F7 t3 H, a/ _3 wecho "------------------------------------------------------------------"
: ^) L! E4 `' {/ D5 R6 M9 e, l1 z./easyrsa revoke $user
) [* T: l8 |5 W1 [5 S5 x% Z: M0 L: e./easyrsa gen-crl
; n  g) _6 s4 I# g5 Orm -f /etc/openvpn/ccd/$user
8 v" B  c+ D+ e/ |}
3 U% l& D4 Z! Q- kfunction alter_user(){
" h/ ~8 n' ]0 w0 H; bread -p "请输入您需要修改的用户名:" user& Z0 a8 [4 d: @! m
read -p "请输入此用户名的新密码:" pass
1 J+ G7 v# R2 I  B0 c0 A9 V# g! _sed -i '/'"$user"'/d' /etc/openvpn/psw-file. C2 s) X; Y  l/ \
echo "$user $pass" >>/etc/openvpn/psw-file
* b! Y7 q- ^* h2 j) q}
0 w; j& G0 ?# X  _" Sfunction alter_ip(){* g+ B$ p6 A& `4 C
read -p "请输入您需要修改的用户名:" user
* C/ i; Q; \3 H: I% g1 yif [ ! $user ];then  H% z* ~, I6 L8 T5 u  n" i1 x
echo "user is NULL"2 G: d& B7 q: @
exit1 K! Q# y' ]/ d$ \, v, ]$ g' f* [
fi& h4 B! t4 f9 R
read -p "请输入您的新IP地址(如:10.9.0.6 10.9.0.5):" ip
6 H( T  G$ \; @' l: i. ~" p* Uif [ ! $ip ];then9 q( X4 L( ]) c7 r
echo "ip is NULL"
# P$ H7 v: S# r3 n' _exit
$ {2 R& G" S* T/ J/ Y0 V2 F7 D) D0 Kfi* q& V0 c9 k6 D! _+ q
echo ifconfig-push $ip >>/etc/openvpn/ccd/$user- W. x. S$ }' E2 ?# }" L
}
6 o) A# [7 J/ d; G7 y% W7 Oecho "请选择您需要做的操作选项"
" Q1 Z1 K  _1 r$ {& Wecho "----------------------------------------------------------------"
# O/ Z/ R) v* @- g' i7 d! iselect VPN in "创建用户" "删除用户" "修改账号密码" "修改IP地址"
4 y2 [# n7 @  P' c& sdo
1 D# ^/ V+ A! ^case $VPN in' a& t. X  F6 D
创建用户)1 K1 a9 O3 \3 E  }7 T
useradd$ ?- T+ H' p/ Q( ~
;;
& b# e7 S, I" a6 D: |9 e删除用户)
% z4 K# n0 u% d; {userdel
$ {6 w- X7 o) U2 ^% W;;
3 i* F8 m: V9 a修改账号密码)7 m7 q4 f- w% a+ ~
alter_user9 j( N& X1 Z0 E; `
;;
9 W" g0 P% a& p2 r修改IP地址)
/ \- K& l( d' q2 l" dalter_ip" a" B7 `9 [. ]9 O* D! i- f
;;
! ~9 Z' h) t* A8 hesac
6 |6 F6 u/ K' k# D' X; @done0 e6 z! v5 h& X. q' j* T
EOF
6 k5 Q8 V2 K9 _/ p5 `3 f" l7 b
echo ''>/etc/openvpn/client/ovpn_user.sh2 @8 p6 r1 u  ^# [! Z, h
touch /etc/openvpn/client/ovpn_user.sh/ p# z/ B7 X% T+ i
cat > /etc/openvpn/client/ovpn_user.sh <<"EOF"
' K1 d( z& ~9 O6 p: s# ! /bin/bash) B) W+ |' ]: M: F
set -e: @" E# b# l9 I' \3 B
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys/ D" l' J, j* h4 i3 k3 W0 J
EASY_RSA_VERSION=3- @$ H* J1 V! @* P/ p5 K1 j7 T
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
* K5 ]: C4 z; M6 P" i" ?  G  kPKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/pki
8 f6 a0 @/ N8 @, e0 B7 t' t; \$ m: t+ {9 G" C( \' ?- q$ @
for user in "$@"$ S5 W) P5 |& ]: f" \
do& m7 ~8 u& B1 M
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then6 ]' _1 D" I) U1 v9 @( }" A
rm -rf $OVPN_USER_KEYS_DIR/$user/ r- d2 L# E* d7 O* Z9 p
rm -rf $PKI_DIR/reqs/$user.req
% {2 V% y( x6 M0 H4 j7 e! dsed -i '/'"$user"'/d' $PKI_DIR/index.txt
$ g9 }" |1 K  y, N' D+ efi
, F" n4 Y# T# Acd $EASY_RSA_DIR/$EASY_RSA_VERSION' F1 p% l! ~6 r
# 生成客户端 ssl 证书文件
; K# G7 i0 ]- j6 }: Z) B8 T+ t./easyrsa build-client-full $user nopass
4 h6 q3 h% o6 P9 L8 [7 }* W- N# 整理下生成的文件
+ g8 D1 N' S3 _mkdir -p $OVPN_USER_KEYS_DIR/$user
, }2 M; |. z' y/ V2 M' Bcp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书& n6 B/ n3 n. ^+ P7 C0 x5 X
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书, V; r$ A3 s' l
cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥7 P4 a5 G8 T- X0 |( u
cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
/ U6 H' j# x7 {" X2 {/ h$ Qsed -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
" B; g2 V7 Z0 f6 e0 \: |cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件
8 a% x* s: ?7 g' o3 R  w* Bcd $OVPN_USER_KEYS_DIR$ ?& @& U4 D2 ?! l* P$ o
zip -r $user.zip $user. H  Q% ], m' Z* [0 w' O% D: g9 t
done
! B, \- C: P1 q7 W2 {9 eexit 03 }  Z2 [; x1 N& y5 v' B
EOF
, `  c( M) s, a* ]) w" D0 E- S# c+ B( b9 w
echo ''>/etc/openvpn/client/sample.ovpn
4 c9 O$ t& ~+ C! h5 W. htouch /etc/openvpn/client/sample.ovpn2 K' ~! x, q5 |8 ^/ j0 R* N- I
cat > /etc/openvpn/client/sample.ovpn<<"EOF"

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:11:31 | 显示全部楼层
# 监听地址
" B5 A9 H+ J0 H/ u- I: g& ^" clocal 0.0.0.0  
. I5 e9 J1 q2 Y9 X( H0 B- }2 O6 k   X6 [6 ~( w. S8 S: d
# 监听端口. |, K. D7 ?! [! w0 x
port 1194  9 Y! T$ T: d! e: S# K; b" E* y1 d

' Z* g6 t% A: V5 ]  }6 I( m# F# 监听协议# |3 R) S+ v1 K; K& c
proto tcp  
# w: ^8 [9 D+ I- M( Z. m: d
% m0 f; k( U, V( h/ S# 采用路由隧道模式" Q/ M1 ^* n0 }( J& L: ~
dev tun  + T8 d# w8 Y6 U& i7 l' u# V2 L

) r3 ~5 ]$ J# o% Z: Y0 L# ca证书路径( G2 d& j5 t+ U% ]4 }. `
ca /etc/openvpn/ca.crt  . m+ U" R0 i) s) v" z
, |; h+ B* l4 z& o. O) n
# 服务器证书, z* Y, n9 B; v! O7 }5 T
cert /etc/openvpn/server.crt  ! Z  {; m% T- [( r1 X6 j
$ K$ S4 F# `3 a( W+ q/ @' m
# This file should be kept secret 服务器秘钥
. R  M& O; Y+ rkey /etc/openvpn/server.key  4 a1 |: J- _5 K; K: i" `* P4 L
& {. L! J/ [9 Z( o
# 密钥交换协议文件+ P$ j- z$ Y) m; X' S, `
dh /etc/openvpn/dh.pem  
% M9 n$ J/ o4 f* j& T + M# B8 b3 a- C/ d
# VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。注意:该网段地址池不要和已有网段冲突或重复1 {9 K! x$ J* t1 J
server 10.8.0.0 255.255.255.0  6 n9 f9 e( U% w! o
5 k* I2 `: T& ?
#使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思
$ }9 i; j% `; F: j8 S% m1 lifconfig-pool-persist ipp.txt 2 O: ]4 a$ j, V: k3 P
8 @" w  D; F8 o1 ^; b
# 客户端所有流量都通过 openvpn 转发,类似于代理4 w# p- z( k" Y& {6 o7 g
push "redirect-gateway def1 bypass-dhcp"! w' \1 i. B* R% K3 F5 `* ?8 \) P

. c% a9 l  k  J1 W, Q# 注意:客户端配置,当服务端开启上面一条流量转发后,客户端需要配置如下2条,客户端只有访问192.168.0.0/24的地址才会走vpn隧道,也就是会使用vpn服务端的IP地址,访问其他地址还是会走本地网络; T/ ]6 o! i% |2 E) J) ^" k
route-nopull
# B+ |5 C% V0 ?$ X* iroute 192.168.0.0 255.255.255.0 vpn_gateway
+ g& t4 m0 W0 ` ( Y- F* \% m; d) z2 |* H; C
# 将服务器端的内网地址推给客户端,添加到客户端的路由表中,可以添加多条2 n# |" H& k" x3 x
push "route 192.168.0.0 255.255.255.0"
0 _1 `: P( Z2 D! {1 j( \
  i  `; G; \: g) ~8 c# 服务端推送客户端dhcp分配dns! c, |5 ]& g1 p+ h3 ~" K- q
push "dhcp-option DNS 8.8.8.8"  " h* s# L( B6 {: T
3 Z- e, K. v' t: J$ ~) _
# 客户端之间互相通信
7 M, W5 K/ ?* ~2 n+ _( ^: Hclient-to-client7 l" P0 I& l6 K: B: Z0 ~6 o7 Z
7 c; X* ?1 \  x- \
# 存活时间,10秒ping一次,120 如未收到响应则视为断线
# f2 M. e" D! h0 W9 i# P% e* hkeepalive 10 120 . `7 x; J0 h; ?" o4 X
5 x0 ~2 [+ t, B& W
# openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令
0 T7 L8 ]. a; H7 \- ]compress lz4-v2
. k- I" V( f+ ^. l& H& J7 r# Xpush "compress lz4-v2"
9 z, I9 S# ?5 {, f4 l" l 0 h- P  Z* b. c: w5 ^* j* l
# 启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置9 `( l3 `) J& w- K
comp-lzo/ c# s+ Z$ [/ |- q* W
: H2 l$ @9 \" Y' E
# 最多允许 100 客户端连接6 I5 N9 }1 Y" j3 m, f* U( c
max-clients 100  ' A  F2 X5 I' G  o. @
9 {) Q! X+ ~! {1 ?5 M
# 用户  T: k; N2 e' ]& ?, I. o
user openvpn  
' `4 x1 S/ Q! B% d# F2 s8 \ $ e2 v/ d( C; r% a. |2 V
# 用户组  ' X2 H' C/ f8 V, y, M
group openvpn  
# `8 N' E; s) L7 j% R1 U8 r' { - c) t1 e! w. u2 g6 \
# 参数 0 可以省略,如果不省略,那么客户端配置相应的参数该配成 1;如果省略,那么客户端不需要 tls-auth 配置
" `0 r* F1 B: O+ C. |; x; W5 gtls-auth /etc/openvpn/server/ta.key 0  
& t% M8 v0 D. w4 S' V6 x3 U
' n& O9 v8 d" n# o4 d, ~) }0 w# 设置一个证书多人同时登陆,如果不允许则注释掉
5 d4 s4 k$ F; u4 u7 o: b# tduplicate-cn
3 c! X$ G$ b3 w  {5 o* T

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 00:34:17 | 显示全部楼层
最好的办法是禁止OpenVPN设置自定义缓冲区大小。在服务器和客户端的配置文件加入:
$ }. r2 V" F9 O0 N+ @
: s) v5 G/ s, r( l" @: Dsndbuf 0+ d$ a' z; Q$ j, X8 U
rcvbuf 0
, ~$ v% f; Q/ r" ]9 F + |. y: ?0 B5 p, Z* u, g
8 g6 e9 @; B: W
这样缓冲区大小就由操作系统控制了。对于Linux,这个固定值对于TCP是net.ipv4.tcp_rmem 和net.ipv4.tcp_wmem, UDP是net.core.rmem_default 和 net.core.wmem_default 两个值除2.
- P2 d5 X( G, O5 W  h* `1 j4 s( O# \. M
如果客户端配置文件不能修改,那么你需要从服务器推送更大的缓存大小:
0 b9 p2 r* E$ U& h9 p- Y" z3 R  O. C! n4 h. q
sndbuf 0, @$ I3 K$ ]- B( W7 T" X
rcvbuf 0
: d& i8 p' j2 b4 Z/ C0 F& Zpush "sndbuf 393216"6 @! K* D3 j; C  \0 o
push "rcvbuf 393216”& g4 s0 r' |1 w: Q

5 u  Z( S2 |! }) i+ O/ [9 D% i# v; q% m3 _6 d+ J6 M
UDP和TCP不同,没有窗口大小这一说,虽然不是整个系统都需要。但是缓冲区过小也有可能降低速度。如果你把缓冲区调成0后还是慢,你应该要么在系统层面增加缓冲区大小(net.core.rmem_default 和 net.core.wmem_default),或者在服务器推送更大的缓冲区配置:
+ R+ C9 l2 I% a1 y7 Z+ `& L- q+ U' m" ^3 B* X& [% I$ J
sndbuf 3932162 i( N& W; n; ?' r- D! T0 x
rcvbuf 393216
# p% ~% p+ h. d& |* Wpush "sndbuf 393216"
, b5 I2 ^5 }$ w& w+ Ipush "rcvbuf 393216”. D  g& P% E4 f, Q1 }  u7 ]. H) E

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:04:47 | 显示全部楼层
; F5 E- i* A  V! ?
这部要做:6 E' B/ p: M) ]
firewall-cmd --permanent --add-service openvpn& A. ^/ B0 U, F! o1 f
firewall-cmd --permanent --add-masquerade
: ^, f3 u: P* E( ^, pfirewall-cmd --reload
$ i) ]/ h' o1 y1 @' {; E5 m/ J9 q0 k# `6 y7 W) b. Y, X1 Z* |
9 G3 l. J0 |9 T8 M: E
优化后的配置:7 E  ], U8 O! K* @/ s

' i' E" J# ?. w: L3 `. a
1 S) F6 O: f3 ^& {服务端配置 (server.conf)
8 ^& S- c/ ^. V: m" }# u# 基本设置$ t1 Q8 l8 Q3 b! w0 L0 m2 b
local 0.0.0.0
8 m2 H& O( M% q7 s& H# Tport 2197* d9 @4 b' d4 X# {& @7 @/ T
proto tcp! ^. |/ |' Q/ N( q/ R
dev tun: Q/ W4 S0 T' D' m
topology subnet
; k7 {0 w$ i* `8 d6 V1 k- e
+ c4 R: O3 ?5 S# @. z
9 t' \+ }2 n. |3 {! J- ^
# MTU/MSSfix 优化,避免 TCP-over-TCP 卡顿和重连
) g7 ^0 T9 c0 s, c: `tun-mtu 1450
" u+ z( }9 H+ o5 I& p. r, N* ^mssfix 1410
, E; u7 p) i; z3 ?push "tun-mtu 1450"
  F. o3 b# ~8 v) B; I7 mpush "mssfix 1410"! k' F' g5 w2 m. t
0 y6 [3 V: y- F7 M/ Z! Y

  ^4 Q7 B7 a3 g  r! D3 O( ?3 n# 证书路径3 A; t+ V0 H8 a1 e' T0 Z; O+ J
ca /etc/openvpn/certificate/ca.crt
2 S0 w2 i) |. P; M! w6 G7 gcert /etc/openvpn/certificate/openvpnserver.crt
! J( ~6 Z6 P) h7 |key /etc/openvpn/certificate/openvpnserver.key
. [8 L2 }1 x& P; f% ]0 u* r/ Ddh /etc/openvpn/certificate/dh.pem
4 ?/ e0 D/ @2 Q  W6 p. ^. ?8 p( Ltls-auth /etc/openvpn/certificate/ta.key 0- k1 I, O- l- V2 _
tls-server
3 M- o. w8 g! W- s* x) B0 ^5 I' F$ A' S8 {8 K7 E

3 w) O) l7 G5 k7 Q' @! V* p3 {9 _# VPN 内网网段0 X5 d% z3 }8 F/ x( F! |% K& c: u
server 10.10.10.0 255.255.255.0
0 W2 U! t4 t  nifconfig-pool-persist /var/log/openvpn/ipp.txt
  q( T* `$ {0 Q% M: `4 b4 p; Q/ f! c7 P% I

  K0 P+ h. w! _# l: ]! c5 {; c# 内网路由推送
$ h$ ]9 I& K- Q9 r8 _- A, V4 k2 f7 Tpush "route 192.168.16.0 255.255.252.0"3 X) C+ b* n6 I& {7 ^
push "route 172.30.1.0 255.255.252.0"9 Z' Y" x/ L6 j) n, c

" s8 U; l* e( F. L

. e; V: ]- d- W& v# DNS 推送" _. ~; {, @1 m9 F* s6 z: I
push "dhcp-option DNS 119.6.6.6"
+ l# v1 `; L# ?+ ?7 w3 epush "dhcp-option DNS 119.7.7.7"$ g, W9 U4 e6 F: H
0 L0 R. t! F! I: u) t7 h

: j' z6 \4 m1 y! Z* y' p' q7 K# 客户端互通
( g4 d" `$ o/ y* F2 [client-to-client
/ g: C: K1 Z2 v
9 l! E) k4 h" r5 V& [' ~

2 h* x) J' ?) V% {$ P: n+ }' u5 H- W# 保持连接,优化 TCP
. O( L, N9 s) R1 P( {2 F: r! Rkeepalive 10 60; u9 E: W) z$ V2 U: F: f6 c$ ]2 X* S; z
tcp-nodelay
' |" i: x, t+ }" ?' b" o7 D% Y- U! p, d2 c% r# S& ^
% m! L( Z7 k, P- z5 C5 i0 f* H
# 加密和压缩1 f! M$ ?9 g! D* S3 l+ ~
cipher AES-256-GCM8 g, q2 \6 D$ Z8 ]& R
auth SHA2566 J) [$ N* @! [: Q- @, w% B
compress lz4-v2* O8 R- N7 i7 J0 c3 `' w; a, F
push "compress lz4-v2"
% E* \  \3 ]( ?' F. E9 m& Z! r& Z: k3 Y, g9 h6 f, d: J

. H# k1 H' |4 s$ j# 客户端数量
- Q* d0 b3 m% J! W+ o2 Qmax-clients 2501 U! }. O0 A* l: l
duplicate-cn   # 如果允许同证书多端连接2 N5 v3 I/ V, a1 `0 b
/ e) ]3 Z; ~, g' U

! g5 Y$ W" r0 F# 用户权限
4 t* ^; P+ ?9 f1 D. }user openvpn; L& H9 k5 h% e- w
group openvpn4 Y# I1 G4 A& M( Z7 \& f+ ~  t
persist-key2 t0 v9 x0 ~: A; F+ N( r) P8 t
persist-tun
& a3 D% q) t) x- W# x' {( o& f: s; d% m4 P; P2 H2 p
: \+ I' l: X( k" ~9 @( s
# 日志
/ v& V# _) h' D5 Rstatus /var/log/openvpn/openvpn-status.log+ x0 U: ]. S1 n3 m
log-append /var/log/openvpn/openvpn.log
5 F" M+ y! x/ Pverb 3' u0 b1 D& J- Y, A: x( P

0 r: `  P- O+ x/ ^* {5 w
- m5 E  c- u8 |) ^
客户端配置 (client.ovpn)& `) F1 p8 ^  v7 Y/ F6 D: g
client
' C; m! q# s$ d+ u8 F8 vdev tun
4 r! X) C8 U& A) M9 B! Xproto tcp1 @: v/ i! j  O: c
remote 119.99.99.9 2197
) s3 p4 J8 O. r1 B; [! kresolv-retry infinite
6 W6 `% F6 S- l8 S- R# Xnobind+ ~8 z& h* `( N7 n
remote-cert-tls server
' i& T  I5 I9 m$ n8 ~7 V3 x1 h* i2 C" n

- L8 m) W* S) S/ x2 l# 证书
6 w: U/ z, Q1 }+ ]ca ca.crt8 v8 \. f* D! Y, F7 F9 {
cert rui.crt
0 J& r, y/ u4 X, L% ?: c- Dkey rui.key4 X8 d  h4 q9 K  I7 t( X- V( ^
tls-auth ta.key 1
$ _# \/ I) b# w6 \
) L4 b+ p( j) u" Q' \# K7 U9 I7 R/ b% ?
+ s# Z9 N/ e) W2 I( ]
# MTU/MSSfix 同服务端  t& b& @) [# ?, O5 n% U
tun-mtu 1450% Z: W% H' I" T  |1 V2 N% {5 r
mssfix 1410
* h. X2 |- Z/ D6 h7 @5 L  `1 U0 J1 X' Q

4 y6 f8 e9 A2 N6 t6 g- A0 ]# 加密/压缩一致
  Z' J. T- f3 Z9 l8 \7 kcipher AES-256-GCM
2 S( P( H. X- X1 N3 K# nauth SHA256
( c- t3 |3 K4 j8 Tcompress lz4-v2
5 k- ~7 v. O" M+ W& F
' _7 u  _5 }& w( O4 M
: Z: J9 S6 ?1 P! @+ g7 e" Q
# DNS" F( {) l, D9 P. q! }2 F7 @- j+ V
dhcp-option DNS 119.6.6.6+ [, y9 F% U5 U1 Z5 D
dhcp-option DNS 119.7.7.78 P/ i) ~  c) L+ ^' |8 g- j

" f9 h3 p: Q* H* v1 o3 S. n

9 h# c# o5 n! `  `0 g+ I# 自动重连优化
, Z7 [0 R: J' s4 ]" @keepalive 10 60
6 c% ^) A4 L6 `, G+ dpersist-key
( B, L2 G& ^. ~6 lpersist-tun* ~; a$ g2 E! S5 c  L
remote-random- s2 v9 r& t; b2 e. E2 e
tcp-nodelay
: @) W) f* K) Lresolv-retry infinite/ `4 _; q( p" B. l: E3 Y9 X
( |- I& P/ [6 v4 }
( t9 p: C5 Y% ?5 c& Y- U7 J! C7 c
# 日志和调试% ]  y' f$ A; B- ]
verb 3
6 E; l) s7 s4 N9 k2 _/ W# y3 _/ t4 E+ `1 R

" k6 `5 @* R, n- V1 ~8 h

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-5 01:09:01 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
, t/ z* k1 T7 E( ~: m$ x9 O0 k0 r0 O* d3 u; F0 z
代码语言:javascript代码运行次数:0
' a% \3 X! f6 ~运行
6 H7 \7 [1 f/ ^3 [1 bAI代码解释- X& X" Y& |+ M/ P" j, K
yum -y update
4 r9 p. k) G5 M. a/ T4 P虽然也是可以不进行更新直接安装。
1 i6 p% U, {$ _) _7 h4 ]
: ]- A$ b& ~) A8 ~/ ?% @: P7 {安装 OpenVPN 和 EasyRSA  @7 y* y1 f; `; _) a% _
+ P$ O4 T# A  G# f: F
安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
0 z' L$ U; W% g( g* M4 a
8 z' y$ D1 S( K$ A& k代码语言:javascript代码运行次数:0
6 v7 h( B, S7 n3 ]6 v+ P运行! E; t$ K# W7 q0 P- Z
AI代码解释
4 R5 O" x* R1 i8 X" Vyum -y install openvpn easy-rsa firewalld2 r0 e/ q* ^4 l8 V0 S# L1 e
如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
/ w) f' o+ x; ^3 ~" H/ `: s7 v
& V. z1 e2 r. B/ A0 B代码语言:javascript代码运行次数:0
7 a( a4 t$ g9 T运行- A7 [' {6 D% `" c) E
AI代码解释
# J  |2 S; e, c1 I7 Y' y# {3 [# Myum install epel-release -y
0 c4 k" g' E# @# |- I* X) a7 C+ P生成 CA 证书、服务端密钥与共享密钥
: R6 k6 u- _$ J8 T3 W; d0 L- _- C7 r
这里步骤比较多。$ X. J9 [; o; w  `% h

* U* \) }" g" C) I" Y首先需要初始化 PKI
/ ~! {: U+ J. R8 _% f3 S/ g$ X. K3 }) A) [" S9 g1 ?/ {
代码语言:javascript代码运行次数:04 }$ H. y$ Z8 u5 F
运行
! x+ ~( l- G9 |AI代码解释
: y, P8 M. M+ k) y* }- ^$ Zcd ~8 W" j/ }0 ]5 ]% }( U( `
/usr/share/easy-rsa/3/easyrsa init-pki* ~; Y' [3 ~3 Y% S( V$ B7 U
接下来是生成 CA 证书
) |: B2 m* Y$ C+ q9 f/ p! T9 E# C7 f0 ~$ A" Q4 N/ n( j
代码语言:javascript代码运行次数:0
! e" q( Q. z  ^2 v运行4 `" b8 q1 f9 \$ Q- s( O- _/ g* h
AI代码解释
) C7 I  q9 {7 ~8 H- I4 `' k9 {8 ]/usr/share/easy-rsa/3/easyrsa build-ca nopass9 p$ N# O+ U0 B# G$ p
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。4 Q2 s$ ^5 O0 I3 V: X* o$ I
8 t" g" |: \3 H: @. J- G; D2 @, `
再来是生成交互密钥2 x( V% [8 P# O$ h5 p. t

" s6 L8 E5 ]7 F+ s* r4 Y代码语言:javascript代码运行次数:0& @2 B) \% R- S; Q+ V: C' Z$ p
运行# v' }. v' o6 w8 B. G" G
AI代码解释( j1 y, N3 S- ?  P3 z0 V
/usr/share/easy-rsa/3/easyrsa gen-dh
2 c! P  J$ q& K$ j+ A) c开始生成服务端密钥- Y, t% g+ H) i+ B( B1 }
2 j+ t7 a2 X! d
代码语言:javascript代码运行次数:0
# H0 l4 w- g/ j* d, t" x. n6 Q! r8 ?  ?运行
1 @; B  w$ o  [4 \& z( s4 bAI代码解释3 K4 J. r/ a0 w0 K" {/ G
/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass
7 C8 y+ M2 U/ p0 O1 ]接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥
/ S  J" p) D3 j+ @- V1 _+ N$ {+ d, @2 s
代码语言:javascript代码运行次数:0
) F3 Z! ?; g' ?  T5 i! _运行# k7 X4 a) e1 X/ N" E7 Y0 f
AI代码解释
2 ?# g6 S) x5 ?9 q. {! K2 c/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass0 r8 r" C  l7 c2 G
最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过
( v$ @# ?) y) ]* v1 X/ o+ g/ S, _/ e2 @* l) B& G  @
代码语言:javascript代码运行次数:0
2 G, T4 |& F4 e( n4 c- ?运行
6 U* w" D/ k3 {AI代码解释9 t; ~( g2 H; x3 q( M" ^' v
/usr/share/easy-rsa/3/easyrsa gen-crl5 V& H" L& r$ e# G3 p, ^4 D
其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥
. H) A5 T, P, G, ~$ D1 R) G/ L+ M0 W) c% |9 @( Q# [) Y( A
代码语言:javascript代码运行次数:0+ ^0 Z7 h4 ~9 y6 a9 w$ N
运行
" h& F, C' _; T& ]% L) A- e2 JAI代码解释- a  o' P" p7 {; u" G- I
openvpn --genkey --secret pki/ta.key
1 P) H4 d, m& W# D: f+ l( \, F在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)
& ]5 l8 j0 E- u$ K* @2 M) Z$ ?& c9 S% ?2 H# q
代码语言:javascript代码运行次数:0. g; R. m8 x5 n. t
运行/ S! @1 W  i+ w& ~2 c+ {
AI代码解释
8 R; ^' T. f3 s: A3 Wcp pki/ca.crt /etc/openvpn/ca.crt
3 x# P2 t$ f4 j5 {cp pki/dh.pem /etc/openvpn/dh.pem- x2 N1 v" ~/ _* e5 Y  K* l
cp pki/issued/vpn-server.crt /etc/openvpn/server.crt/ H* ~" W1 m0 x: l& C
cp pki/private/vpn-server.key /etc/openvpn/server.key
/ O1 l  I2 z. f; Jcp pki/ta.key /etc/openvpn/ta.key# G0 e# ^% M2 t6 S& S' D% Z
cp pki/crl.pem /etc/openvpn/crl.pem8 {+ L# i% X) I( [1 K9 F
配置服务端/ ?3 `# ^- Y; r7 A+ U: z- Y  o

% ~" T: K4 y: ^7 TOpenVPN 配置文件有许多可定制化,具体请查阅官方文档。
' Q8 E- c/ }% X9 M9 F0 X9 s5 O' t2 L( A/ b, Y5 N
代码语言:javascript代码运行次数:0; Q  P# h2 x; D2 L" f* T
运行
& d( @3 J# |; R0 M; Q, I3 yAI代码解释
! S- ]/ I  w. N+ }; E. T7 E- ecd /etc/openvpn2 Z# `6 ]/ V, L) u3 S" B
vim server.conf  Z, }, Z4 ^$ x. E: L6 B/ J
将以下内容粘贴进去
% ^% X: j, Q. P' Y: ~& S; q) x# x$ ^: s
$ r9 [% O- G9 N# h5 O3 `; o代码语言:javascript代码运行次数:0- e, b& \! x* T4 Y3 I
运行& A+ }  d, x( |* ?% n% j
AI代码解释9 |1 z1 t8 j, T
# Secure OpenVPN Server Config3 t0 j2 L& S+ {2 s
# Basic Connection Config! Y- G+ |# n& g$ g, [
dev tun
! n8 _7 C# C( e2 o3 w; x6 b8 [proto udp
. z6 G" v5 P  Q- iport 1194
; c: [  q* Y/ [7 @keepalive 10 120
" G8 q( r# t& i  w1 k# K, Jmax-clients 5# `  X' e5 B' t' ?' L4 U5 x/ X
# Certs- `3 @' S4 a2 P0 Q; e6 O6 {
ca ca.crt2 K3 W- p" \# i
cert server.crt. X5 g" g$ r- b( N/ R: J/ u2 u- ]
key server.key
4 E3 R7 k- Z* ?4 b5 tdh dh.pem
& w1 D7 r: l% k: c8 L3 Vtls-auth ta.key 0& Z  V/ j: t( z1 s
# Ciphers and Hardening
' S+ M  o# o- F; qreneg-sec 0
% U$ p5 L1 W5 b" l! D$ u1 I' Q1 E* vremote-cert-tls client
) S' ^% s. ?& l3 Z! m- r' J& d6 `0 Lcrl-verify crl.pem5 A8 h2 L% d: d1 P
tls-version-min 1.2
( J$ Q8 y6 f9 H) t0 N7 Rcipher AES-256-CBC  i& O" r' _: M; c- R  v
auth SHA5123 Y4 t$ L" p/ _% s
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; _. i7 j" J# G# c; x9 s- F
# Drop Privs# [3 ~8 O$ U. `+ u$ c# d4 O0 x9 b
user nobody
! a# r( q( j- X* K1 lgroup nobody
0 T( ?. n6 @6 U1 \, d7 c% e- \+ c, a# IP pool
4 X$ F) e/ L* q/ xserver 172.31.100.0 255.255.255.0
( ~: x. V: ~9 o& w0 l' qtopology subnet& _1 Y) C0 M( j: t
ifconfig-pool-persist ipp.txt
, Z$ \. n4 C/ Q7 G% Kclient-config-dir client
; t" s: g, m' ?& X* T* i- p% k% F& q# @# Misc5 y' u, r* o2 q
persist-key0 c7 Q% W1 X/ X  H* n
persist-tun
. g' `  @* ^* e9 U4 m  o: A! fcomp-lzo
8 @/ M6 ?& m1 Y/ |# DHCP Push options force all traffic through VPN and sets DNS servers! k- \% \4 k0 ~$ y! P- K/ |
push "redirect-gateway def1 bypass-dhcp"
, @6 Z0 u+ S0 L$ z2 P7 Z3 Jpush "dhcp-option DNS 8.8.8.8"# p; j/ o3 A" [8 U) ^4 G  Y
push "dhcp-option DNS 8.8.4.4"' c6 W+ a9 T( v, c. L" g
# Logging/ _1 m7 }8 l! ^( f
log-append /var/log/openvpn.log* Q4 D# W1 I4 z) K- H& ]8 b4 W
verb 31 i) e4 {& g. M7 R7 u/ H
启动服务端并让其开机自动启动/ z" q  f% V! H! o8 g0 Q$ D0 a
& n! a1 a0 N$ ~+ \$ i" F
代码语言:javascript代码运行次数:0
. Q. ^' J6 [' H' H  f! u" b& [0 |运行2 n& N' ^" F" i/ U
AI代码解释* O$ d9 ^# _. B3 q0 m
systemctl start openvpn@server
& S$ P0 B0 v3 Q8 j5 g  M- H2 _systemctl enable openvpn@server
- H  ]) I7 a; [6 g# J/ B配置防火墙与流量转发2 q4 G3 ?2 K) u2 H+ N# P
9 d6 k6 F! Z# J/ z* f
放行 OpenVPN 入网流量与开启 IP 伪装: L: P3 F3 G, h! v& e6 k4 C3 K8 `7 I

5 i2 `- ?* |# C( o代码语言:javascript代码运行次数:0
' ?6 L: w8 d8 ?6 N# \运行
7 e$ M% B) o0 v5 Z, c# X- n; aAI代码解释
8 s+ k8 Z/ L, C" W1 q0 _* G3 x% Bfirewall-cmd --permanent --add-service openvpn
2 Y' |& e% Q: r0 G6 z! P' dfirewall-cmd --permanent --add-masquerade6 S6 R  S$ h2 f) ~
firewall-cmd --reload
; O2 b' ^! a5 r+ k  ~$ [5 Y) Q检查是否开启流量转发+ m( j. j4 d/ r/ Z4 U% l4 H

  m0 b' @! \7 s% y* r- ^9 m; q# c代码语言:javascript代码运行次数:0
' }  o! h: }0 H: V+ C0 D+ Q  i+ R运行
- L2 N+ Z5 q7 C! dAI代码解释& t) y% C8 I* F; T" g3 H
sysctl -a | grep net.ipv4.ip_forward
; W1 O3 T! P5 Y% c% d& c确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下0 W9 d1 E  G2 N+ s" q

3 M" o" O3 k1 T代码语言:javascript代码运行次数:0
6 \8 \0 C( u2 O) P运行' }- z3 U( _6 h/ N; q' K
AI代码解释
1 T: C' h& a- Q4 x% G* A$ r6 Zecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf2 Y) g& @7 v0 j( W  d
sysctl -p
7 I' g, C* p) X2 o* m( j, _配置客户端
& F8 B1 |$ |& P5 d& g6 D% u( m5 ^& D3 x3 H$ \- u$ G8 m# X% O+ P, M7 q
客户端需要拷贝以下文件
" X! d  s+ h. U0 Q9 H
6 r- z: n7 N& g: u+ D代码语言:javascript代码运行次数:04 d- g7 H+ X) O& V/ Z1 f
运行
: @9 ^# A% x% r8 ?4 @AI代码解释0 @! V% \; _1 a; c. K! r' T
cd ~
2 V1 L9 L6 A+ @9 d4 ^7 }- u+ z" Dmkdir vpn-client-01-config
  u$ C" P) a6 Z" N; w; M0 ]' Mcp pki/ca.crt vpn-client-01-config/ca.crt# B5 Z3 F1 W3 |5 e8 v% m; d! o
cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt
' m7 @3 `; v: t" S; H! dcp pki/private/vpn-client-01.key vpn-client-01-config/client.key
4 p# n. b" w  y) ]8 q5 A* Scp pki/ta.key vpn-client-01-config/ta.key+ }2 y' s9 T& f0 A9 J9 x
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容) G8 r) |! G+ S0 {) g, c, H4 J* C0 W
" B$ G! h( c. L3 v& O& r% i
代码语言:javascript代码运行次数:08 o4 k! P: b9 [% r8 J6 O
运行
4 |1 M  K" H! TAI代码解释) Q6 A/ f3 o. R7 a6 F  ~3 Q. o
# Secure OpenVPN Client Config0 O4 f" {, L( y( [. M9 O& z
#viscosity dns full
" c  n8 T7 ?! B" W5 g. J#viscosity usepeerdns true
% w" k  P8 Q7 a. |4 L. i#viscosity dhcp true1 t. f2 p4 E- H4 }6 l+ Y
tls-client2 A" k1 E  w7 E
pull
/ T4 Y! q% H. a+ m; s5 W, |client
! {/ q8 b5 ^" s/ h; n/ Zdev tun' ~) g. t- }2 T! }4 _5 |
proto udp
3 E; r% `2 U" I  t. Z) u% dremote 123.123.123.123 1194
- ]% L7 w# U! w1 X3 Z& Dredirect-gateway def1' [  e) s5 A- Z% h* e
nobind; C8 |& ?: S9 o+ r
persist-key; ~/ r6 E1 B& t0 h2 N  b6 b
persist-tun
: I& l& ^! b! U: i; Dcomp-lzo7 S4 N3 F) ^' J6 k$ M% c% E
verb 35 ?8 A' u; o* ^. e3 B6 r" ?- ^' y+ s
ca ca.crt5 `1 p6 J; c; e
cert client.crt: \* o' s/ k: M/ p: M) @$ U
key client.key
$ p9 ~1 m, |+ |2 A% p! K9 mtls-auth ta.key 1
1 @2 S9 Z6 }( q5 Cremote-cert-tls server' @5 ^6 n% M  o# n8 |2 i
ns-cert-type server
5 h* y7 M  u7 P; z2 K  X- n6 rkey-direction 1
4 m5 {) q( q( E6 acipher AES-256-CBC" X& v5 _; M3 o- D* x  `
tls-version-min 1.2; C1 ?/ U0 i' ]" v! _5 X
auth SHA512
* D# C, d9 `  h9 E+ Z- etls-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-SHA2568 k: U% M3 b: c+ `
& h7 R& j( F# X7 _$ j& t' ^: s
remote后面填写服务端IP地址和使用的端口号,然后将 vpn-client-01-config 的所有文件拷贝到需要链接的电脑上,即可开始使用。' H+ N: J; _( E

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-6 23:24:01 | 显示全部楼层
调整压缩设置:启用压缩可以减少数据量,但可能会增加 CPU 的使用率。在配置文件中,你可以启用 LZO 压缩:0 s' d% X. I' `7 z  X7 k

- N, N6 L4 c4 F, u4 Mcomp-lzo

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-5-16 14:23:56 | 显示全部楼层
Centos7安装与配置OpenVPN服务器,更新 CentOS 软件包
% r, D" Q/ b- R! G( O
/ m1 p4 x( z, P" k7 r$ @代码语言:javascript代码运行次数:08 I7 l. ^7 V, `+ H$ E
运行- w6 }: ~3 T& ]7 o( v8 o8 j
AI代码解释
9 ~6 e$ J' h* Myum -y update
3 G" g; _9 M3 I; l4 p8 v; r" R虽然也是可以不进行更新直接安装。6 s: y! u6 p$ w

2 K8 p4 n3 A# v4 ~& R安装 OpenVPN 和 EasyRSA) M7 h- Q; T3 p6 Z+ A* F6 c

# u5 U) Z1 y/ J  j安装 OpenVPN、Firewalld 软件包以及用于生成各种证书的 EasyRSA
2 H# S1 Q. Y$ _
: Y2 I9 |$ G  N3 `( ?. n代码语言:javascript代码运行次数:0
$ L# h9 z) T# r2 y9 ~0 s运行
1 {1 k! L3 p% z( mAI代码解释+ v7 r) a2 V- H$ @
yum -y install openvpn easy-rsa firewalld
, o5 H+ O* i* h/ }如果未能成功安装 OpenVPN,则可能需要先安装一下 Epel 库。
3 Q% L2 G* Z# b
6 U$ a5 O8 b6 e, _代码语言:javascript代码运行次数:03 V/ T- O) ?, U6 P; I0 J" k0 G
运行, G% T7 B1 s  d2 Q
AI代码解释
9 @. D; |& U5 ?+ kyum install epel-release -y* z6 j/ P; t. n4 H" d
生成 CA 证书、服务端密钥与共享密钥
. z6 v; |% w, s
* U  @' X7 a, K这里步骤比较多。
) z9 r  N. f6 O- X
/ Y, b9 x5 |4 S, k6 q首先需要初始化 PKI$ I0 k# L7 X( N  F- B0 I
& c% T+ t4 z. G& q& ?' y& i; f
代码语言:javascript代码运行次数:0
1 [4 X$ B# L7 j7 r6 d运行8 [9 h& g$ J1 h* ?
AI代码解释% p5 T$ o6 f# f5 N$ a
cd ~$ @4 P) ?' l& F: \0 R
/usr/share/easy-rsa/3/easyrsa init-pki
* }; ~3 y& Q/ P* T$ ]$ o; N, w接下来是生成 CA 证书
( l2 l$ L# c9 S- K. O+ S
7 N# B" f4 J! W3 W3 k代码语言:javascript代码运行次数:0/ O5 L5 \8 i& @3 G/ D
运行% `  X+ S0 ]  h9 T+ Z
AI代码解释
9 M" ^6 d, \* J4 D7 @/usr/share/easy-rsa/3/easyrsa build-ca nopass" C+ v3 q( m. H0 U8 h
其中 nopass 表示不加密私钥,主要是方便后面导出公钥与颁发服务器证书。5 j- @5 _* T1 Q: _& W
: C. c+ ~* i9 G. X; S; c/ n0 Y
再来是生成交互密钥% R. {" Q* ]9 n; n9 j3 M
, z% i! P" \9 U% S/ Z6 _
代码语言:javascript代码运行次数:0
' g: l: D2 K# \4 t7 n运行
: O. o0 q' r9 O  e' M0 bAI代码解释
7 Y! I0 c! e2 f1 d/usr/share/easy-rsa/3/easyrsa gen-dh
/ h4 q1 q, x' [: o- e开始生成服务端密钥
3 V. L$ V% ]2 Z/ R" G6 b: @
5 A, B. q% w5 C2 @2 v9 W代码语言:javascript代码运行次数:0
7 b1 {, `5 E- i- A. r5 \运行
; C# _6 b5 X4 T& R% H8 c/ z+ WAI代码解释
, t! k5 _# U+ k* A+ _, x* F1 s/usr/share/easy-rsa/3/easyrsa build-server-full vpn-server nopass$ E; O( B) @. v" A
接下来生成客户端密钥,如果未开启同证书允许多人登陆,则需要多次执行生成对应的客户端密钥- r- j' a4 t$ Q+ x$ c5 Q3 {

3 F1 N( G/ B( v( t& X% c8 s* ~( H代码语言:javascript代码运行次数:0
$ ~$ j8 b; Z3 q- e0 t& G: g% K运行, w8 T7 S$ x8 |3 X- ?2 Y; x7 G' `
AI代码解释: A+ z; t: Z, U1 D5 e$ h
/usr/share/easy-rsa/3/easyrsa build-client-full vpn-client-01 nopass1 q% ?( @9 {2 V2 G0 G$ [
最后是生成证书交互列表,如果不需要 crl-verify 则可以跳过& @: s# l' Z& D$ R; T) }8 x
/ J  V1 A9 ]* R2 w7 O9 Q
代码语言:javascript代码运行次数:0
4 ?, i; ^. Y) {* i3 ?1 O5 e! u运行
) }6 c' J3 Z) k, f* ]AI代码解释
# Z' W0 d8 K1 d2 t+ \/usr/share/easy-rsa/3/easyrsa gen-crl: L8 E2 N( P4 |& _. U, W* Y
其实到这一步需要的证书都以及生成好了,如果你开启了 tls-auth 则还需要生成共享密钥
$ D/ j' w7 L. g+ Y/ l/ F- A, V8 ^" N7 v* D# q+ _2 Q  _1 ]
代码语言:javascript代码运行次数:0: _/ Y+ J. Y' h  ~4 y/ L" `" E+ A
运行5 S8 c8 B$ o& }! F
AI代码解释
, H7 n% L4 t7 q& P0 t9 lopenvpn --genkey --secret pki/ta.key( L- ^& T  j: H7 K
在上面所有证书都生成完毕之后,我们需要将相关证书拷贝到 OpenVPN 的配置文件夹中(似乎也可以在 conf 文件中使用绝对路径)
: z1 y! U% z- s8 s2 k$ K0 u4 _' w  K1 O' ?' Y5 [
代码语言:javascript代码运行次数:0
4 ~" ^8 O2 f: |' i$ a8 x* p. I运行7 [: X; z" ^7 \5 k7 H
AI代码解释) S$ s# P8 s3 j- h
cp pki/ca.crt /etc/openvpn/ca.crt. D6 V6 Z/ b8 h! x0 X9 T, @
cp pki/dh.pem /etc/openvpn/dh.pem
$ ?0 V. Z% ~/ s' q+ H( y6 J/ rcp pki/issued/vpn-server.crt /etc/openvpn/server.crt  o1 P  L5 u4 V0 Q. [$ M  H: }
cp pki/private/vpn-server.key /etc/openvpn/server.key
  n8 o1 H9 n" j& o( E; scp pki/ta.key /etc/openvpn/ta.key
, q! |: B. {: Xcp pki/crl.pem /etc/openvpn/crl.pem
; ^0 j' ~& U" [. Z' L配置服务端4 T, a# A3 E2 _

1 y- l0 W. T% C  XOpenVPN 配置文件有许多可定制化,具体请查阅官方文档。, w' X! I7 [5 l
: Z( V8 s% r7 h6 N0 T
代码语言:javascript代码运行次数:0
1 Z7 ?' G! m8 g" W运行
* s! a2 L; c5 A- W2 I  ?, T. CAI代码解释$ D7 x; P, R2 B$ ^, G  S& H2 m
cd /etc/openvpn
( R3 y1 e/ e( m3 ]* A  pvim server.conf& b  z2 L& I' \* R6 A) F  f
将以下内容粘贴进去
% i" U* G$ S8 b, E- P
3 J0 H+ R7 I6 ~2 Y. `' |代码语言:javascript代码运行次数:09 ^' e0 S) t. h3 R" P% h$ P
运行' ~' u* n/ o4 a- P* C9 f3 G
AI代码解释
- \( k# ]9 Q& i+ s# Secure OpenVPN Server Config& _# o! q  F; A- Y: a( e
# Basic Connection Config" A6 @! G9 c. g( M  [3 ^: K6 ~, n0 N9 g
dev tun7 j' T, z4 c4 c8 c, d/ ]5 ?
proto udp
2 n  G. p- X1 @$ A; iport 11945 q- N% C* w: g6 p* L) j* M; z+ ]
keepalive 10 120
0 f% S$ c. x# j! Z1 W  Nmax-clients 5
% Y8 ~4 w2 ]) D5 u2 D, I7 _; Q# Certs
) Y4 X' L, V# i4 P" i8 B  \ca ca.crt
: ^# `) n; Z# V0 ?" ?: A" l/ {& ^cert server.crt
- X; L' [) K, N0 J2 ~3 ~/ k+ _key server.key
- i) ~- N' p6 s8 Ndh dh.pem
' Z! h" F0 U1 |' {& Mtls-auth ta.key 0
2 k" Z" u8 G% _/ v0 i6 e# Q/ `# Ciphers and Hardening) K! a' S7 ~& N9 A
reneg-sec 0
) B( v- W+ \; Z  z  W& \remote-cert-tls client
4 p, ]- L3 p" N, v4 i! T* u5 Lcrl-verify crl.pem$ B! [# V: x* V, I. Q3 M, q0 @
tls-version-min 1.27 V) ]: A* }) @% d( J! s
cipher AES-256-CBC" d" x0 \. m% ~3 H2 X
auth SHA512
1 P7 e6 s8 T! Ctls-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! p- `: A! a2 e7 J' V. m
# Drop Privs
3 ~& Y. Q# [* W) ~: N4 O' juser nobody
  C  h4 d' I" E* Kgroup nobody
1 A7 |2 g7 ~, _/ f# IP pool$ d$ M- R! J1 Q5 W. n' Y
server 172.31.100.0 255.255.255.0; r1 K5 t: V0 n; q3 F
topology subnet) S  q6 O* y) y! Y/ q7 _
ifconfig-pool-persist ipp.txt
4 W+ U' B' m3 `! fclient-config-dir client
. q, o3 M& c% y7 j/ i% @# Misc: P1 o9 b6 a) }
persist-key1 j7 |! m* q$ k, ^1 I1 ^5 a
persist-tun9 h% j$ r6 Q; e) V
comp-lzo( A7 w- F, G" b1 u- U; _3 Q9 B
# DHCP Push options force all traffic through VPN and sets DNS servers
; L. |' I; @$ f% p& u: `push "redirect-gateway def1 bypass-dhcp"+ B+ U5 h" r7 V8 Q0 T
push "dhcp-option DNS 8.8.8.8". I: ?- G5 l) M6 c9 w7 m, H! i+ y
push "dhcp-option DNS 8.8.4.4"
) d; U5 a2 {9 \* b3 k# Logging
9 z1 K# g2 e9 S9 V1 B# V! T4 ^log-append /var/log/openvpn.log
7 ~  c" N' i/ t' _+ W  |2 Hverb 3
1 K& D% U$ B7 h7 D* G4 C  A* Z+ a启动服务端并让其开机自动启动2 l# l* B% b. H- ]
# j# C( t; m! q3 m7 Z  M
代码语言:javascript代码运行次数:0
0 e. n9 e, v+ g2 y: V# B, ~运行: D4 p# H* d$ Y$ J6 Z
AI代码解释' o  j4 ?6 K% H! ?: [
systemctl start openvpn@server
& D2 d3 G% q* M1 O( |3 psystemctl enable openvpn@server
; b. Q; h0 }! Y) U! Z" W$ _配置防火墙与流量转发3 s" Z, c+ J* {7 M
4 L! V2 }) o% D0 L6 E
放行 OpenVPN 入网流量与开启 IP 伪装
  i/ u, h6 M# {- j- Z2 P0 J
+ x2 E& o7 u' o7 j; ~代码语言:javascript代码运行次数:0
, {! j; G) t2 e+ b% n运行5 J" J# Y3 I. O# @, H1 w9 C
AI代码解释
$ T8 c, M% u5 M( ifirewall-cmd --permanent --add-service openvpn& ~- q$ q* I* Y: s5 G4 i7 _
firewall-cmd --permanent --add-masquerade
7 W6 |( M( |/ ?" ?. b- M8 ~firewall-cmd --reload" g8 G" a3 R  t+ w9 p
检查是否开启流量转发% n! F1 F8 u" C4 c* {; M4 ]3 z, ], t% n
$ x: l5 m' |1 {9 `
代码语言:javascript代码运行次数:0' D5 I& V3 {7 E" B  t) J
运行0 Q$ {, D; Z( ^0 \2 i9 U; T5 y
AI代码解释$ }8 g3 `3 G- B* y+ Z/ B  G
sysctl -a | grep net.ipv4.ip_forward* r$ Q% t8 ^0 @0 [9 D
确保net.ipv4.ip_forward 等于 1,如果不是,则需要修改一下7 v& E: B( g; m# y
* r& N; N$ a, p4 q" ?* P; r
代码语言:javascript代码运行次数:0, d* m  D' m5 ^+ g
运行
) n3 c' R1 D7 X* k9 sAI代码解释+ m# _* O: o# N7 Y
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf( r+ p8 V! G* l6 I8 P8 E6 g% ?
sysctl -p6 N" I+ u; g7 _5 M" ?) ~$ ?
配置客户端
0 O8 ]! Q6 Z/ r$ G- H# k8 W" a7 ]* t& k
客户端需要拷贝以下文件
. U, p6 J8 n# B2 p: Q/ ?
* @% G$ Q" g  n* x代码语言:javascript代码运行次数:0
6 Y7 ]: r) R( }5 j( Y; a运行
$ j4 v0 r0 {9 L7 {5 yAI代码解释* B6 y; d; ?2 m* ]4 w
cd ~# s  F+ `! o+ E+ ~) m4 W7 |3 F
mkdir vpn-client-01-config  E& t/ a, {- B1 Q2 _. `2 q
cp pki/ca.crt vpn-client-01-config/ca.crt" c0 J4 {" [9 x8 y7 ?8 E5 @  H
cp pki/issued/vpn-client-01.crt vpn-client-01-config/client.crt! V6 f- K! q$ c0 c( \
cp pki/private/vpn-client-01.key vpn-client-01-config/client.key6 s4 B( M9 w/ q, V. p3 ^8 G( E
cp pki/ta.key vpn-client-01-config/ta.key7 G: U. r1 ?9 S3 d0 R
最后vim vpn-client-01-config/client.ovpn并粘贴下面内容9 I: G: [; u3 ~+ F
- x8 J0 r% l% d0 f
代码语言:javascript代码运行次数:0
3 f8 e# V, [) G2 N! n运行
/ Y9 G1 M5 B, V: XAI代码解释8 e6 V7 e9 @+ f4 c% ~
# Secure OpenVPN Client Config7 d8 P. D1 S3 Y# i, l* H2 ?, t6 ?
#viscosity dns full2 N9 T2 M1 v! a4 ~2 I
#viscosity usepeerdns true
4 Y- r9 ~& I9 R* I% o; ~. @#viscosity dhcp true3 {; w) H% v& r" V/ M
tls-client' W6 @, h+ j, r0 x1 B/ m5 r" m
pull7 E  M" ^& l* \# g3 J( P8 j8 j
client+ g# k6 i! w. `( j5 q
dev tun
/ Y! o& `/ k, {! G/ i1 Jproto udp) f" Y& y- g  f: w* C8 V$ X0 G+ l
remote 123.123.123.123 1194# N* E" h: G/ z( o  l- |& J
redirect-gateway def1
3 L3 q6 A: H& ^$ n- onobind8 l3 ~: l" b. l
persist-key
3 v* C" T6 @% Z0 j5 }/ k& hpersist-tun! z; S) Y6 }3 J# N  Z
comp-lzo0 L6 D, z" Y% I% l* a2 @9 o
verb 3! f& H9 n' a  d5 m% Q/ E3 m
ca ca.crt
2 N6 x: j: ^4 a' g2 H% z3 _( a- {cert client.crt
$ M% t4 R$ d( m& k( O) [key client.key
7 n% O" r6 p: utls-auth ta.key 1: m$ i" y( u8 t  c/ ^
remote-cert-tls server0 a4 m; E6 q% t4 U( Y( E  i. o
ns-cert-type server
  @0 x0 j: G/ i0 R/ K! a9 Vkey-direction 10 P! F5 A+ _  Y8 m6 M
cipher AES-256-CBC: N; d& k: W6 z
tls-version-min 1.28 ~6 F, x% h7 [' P
auth SHA512& X+ }9 E1 z- |' S
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, \* A8 w( g9 F
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 00:48 , Processed in 0.030410 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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