找回密码
 注册
查看: 4825|回复: 1

CentOS 7 配置 IPSec-IKEv2 VPN,适用于多种操作系统

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2017-9-23 10:38:32 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 2 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-9-23 10:54:40 | 显示全部楼层
这里使用的 VPS 服务器配置:
( U" }9 f9 ^: c0 v8 _+ h) W# c7 h; T7 u" G; M% D
CentOS 7 / 512M / 20G ssd , $5/月. 详情请看 这里
: g) h8 ?$ K  b9 S禁用 firewallD, 启用 iptables.& A( I, L' Z3 B" I! r+ I
strongSwan 版本 5.2
3 k* k6 E- Q4 i. [. ?! uxl2tpd 版本 1.3.6
0 p* `4 D9 W2 l7 L/ B安装 strongSwan
+ |; {9 P6 T6 g( g' e
3 g2 M- G' H2 ^; V0 PstrongSwan 的发行版已包含在 EPEL 源中, 如果没有添加 EPEL 源, 请看 <<CentOS 7 配置 LNMP + FTP 环境>> 添加 EPEL 源.* R- J, ], F7 }# U
; N& L" Y. M& K
添加完 EPEL 源后输入如下命令
2 _: \8 T+ z; `5 l3 V. K" D! Z2 r3 G5 {' k  K& d" X/ S0 s
当前为 5.4.0 版本, 官网上最新为 5.5.0, 但是需要编译安装.
, R2 x4 ~/ f# P  d0 V+ Y& P1 e3 M, [: m2 d/ q- q: B3 r
1
7 S4 Y( |" w  Q% H6 R26 a* }' s! H8 z6 O# d
31 F( r5 Z9 i. E( v- U! \
yum install strongswan- t% y/ a: a" f' _: f' l
systemctl enable strongswan2 X) ~3 c2 n5 R
systemctl start strongswan
3 i% Q! d1 S6 j8 f' |生成证书# b: P) i7 n/ U0 l

' k! E9 e- R( R5 k4 S' j% h生成 CA 根证书! M' q% ^" }, N; D$ A% _

5 ~! s) p3 j6 J  R1. 生成一个私钥:* G8 X0 i, r1 N8 O5 B
6 S. R) w  E2 C# g1 ]$ k
1
- A5 I: B; L2 ustrongswan pki --gen --outform pem > ca.key.pem8 J0 P2 q; W  \- V% x
2. 基于这个私钥自己签一个 CA 根证书:7 M- Y/ N' Z1 y0 I! J
1 y. i5 ~5 V+ k
1- d# a& }5 D% Z" q! c. l. o
strongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
) l& @8 R4 |$ J/ a6 J–self 表示自签证书  l: M4 s# J; ^7 }+ L
–in 是输入的私钥
& C# N5 n$ l- }4 p- g- I- Q# {: ?7 o–dn 是判别名
) B( a( t. T" r  w" F  m. J  Q/ X7 S; [) a2 R
C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名; T4 q6 ?' W! U" B" `+ n
O 组织名称
3 X2 N$ K( ~6 p- ]# SCN 友好显示的通用名. `+ r5 ~1 w! L6 t0 v, M
–ca 表示生成 CA 根证书
2 {  t( B0 }' P8 s" v–lifetime 为有效期, 单位是天
+ W3 b& @. F) y; J8 m( n
" A- ~9 e# @( `5 y  P生成服务器端证书6 _! q$ L1 z2 M( C/ e

2 d' C) A; p7 i8 Y9 n. L1. 同样先生成一个私钥
' f' n$ @3 l' l: c8 {
$ ]& r) }5 e$ t7 w9 }9 G15 ?  n7 d- ?7 ~+ K( r. i
strongswan pki --gen --outform pem > server.key.pem
5 O( l% S6 P3 z. A2. 用我们刚才自签的 CA 证书给自己发一个服务器证书:* P5 }: f! C" Z* E# v0 P* {# d/ g; T
7 Y" N2 a0 z; ~% {
1% z. h0 ^9 m! `, R
2
6 H/ t  j" Y: Z5 c" L' T$ v3: U3 F" K" R& o2 @8 g. d$ J
4' J; S4 Q) V4 Q
5
% D6 F$ ^* k" ?2 B- C( E9 h#从私钥生成公钥2 ~, P3 C  @: Y
strongswan pki --pub --in server.key.pem --outform pem > server.pub.pem
' _; @& E) V. M2 k9 @   |; G* V1 \/ n
#用刚生成的公钥生成服务器证书0 D  e( t" A3 a* ^
strongswan pki --issue --lifetime 3600 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=ITnmg, CN=vpn.itnmg.net" --san="vpn.itnmg.net" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
' x& R( p! S& E–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。
1 x, x" S6 ?7 i+ u% `5 t–dn, –san,–flag 是一些客户端方面的特殊要求:
# i2 C, l( }$ i  i
* f" E( S" o+ Y# K3 g2 ~iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;7 f: p; U9 n" U% @8 d% @
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;/ x4 Z+ S/ H4 K5 m" K& [7 U
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;& h  t* e% V3 Y% c# x, L
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。
, m8 t+ @( w2 B) c生成客户端证书(可选)6 A8 n; l, h$ \: x) I; Z
) l5 u; V2 [" d4 y$ B
客户端证书是在启用客户端证书验证的时候, 用于验证客户端用户身份的. 每个用户一个证书. 如果需要很高的安全性, 可以用客户端证书, 一般情况下, 不需要使用.
, a* b/ ~$ t( v( ?* ]: Z- C7 U; S. X2 `( n
1. 依然是生成私钥:8 r. S4 t% ^4 l" |

0 f% W$ k# |, w6 d- |, E" S( R5 r& G1
8 X  U+ d+ N3 istrongswan pki --gen --outform pem > client.key.pem
# `# V7 p5 Y" A" c2. 然后用刚才自签的 CA 证书来签客户端证书:' ?# `, m6 i/ p" r6 h' e! _" e

4 d2 l. w# h& W0 G9 v! Z1; Z0 u- ^4 |, J! P* y- L
2* y" b& d% F/ X6 K1 Y+ o/ L
36 ^7 n/ t4 c. }# M) O
4
" c% u3 `3 Y- h- Y# A$ B5$ k) c& F4 ^9 @
#从私钥生成公钥
. v  x# R! l! a0 C9 \strongswan pki --pub --in client.key.pem --outform pem > client.pub.pem% m; _7 M5 w  B0 U. r, j

4 a# U- q3 b& a( J' \2 S#这里就不需要上面那一堆特殊参数了* `6 N4 B0 b' _& R$ Z1 E
strongswan pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=ITnmg, CN=vpn.itnmg.net" --outform pem > client.cert.pem
/ ]! B4 [; p- v1 o6 K- t打包证书为 pkcs12
% I# h3 d' g( P6 R+ `' R" q4 C# v' w2 p5 w* t3 ~5 E5 L/ m! E0 f. y
1% y1 A" K3 f0 s
openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "ITnmg StrongSwan Client Cert" -certfile ca.cert.pem -caname "ITnmg StrongSwan CA" -out client.cert.p12
  _3 }0 s1 z% N7 h! C0 P) B; A此时会提示输入两次密码, 这个密码是在导入证书到其他系统时需要验证的. 没有这个密码即使别人拿到了证书也没法使用." \5 E0 N0 T( ^0 H$ Q- `  q. @: ~

5 q% h% ?  I" k% b安装证书
: N2 L7 p7 {7 H% _* m7 U' ^
  K7 `) |: d! u4 g% p! T1
; _; t2 Z( O+ E( ?- @4 S2
* h& L1 B. {/ P7 d& q32 n5 R% K2 W% m9 x3 h0 k+ a
4
4 r+ _+ A% \2 \( s/ v5$ P4 x, x) x% R$ [
6
" J8 j2 y6 F5 N# g' N% X/ Y9 O/ D7
7 N9 ^; d' a5 |. y9 w& u+ u9 hcp -r ca.key.pem /etc/strongswan/ipsec.d/private/: r" v  h9 s# ?- e$ l
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/- X7 W3 l6 }0 V! F/ o7 T, W
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/" g# }- f5 l7 S: R
cp -r server.pub.pem /etc/strongswan/ipsec.d/certs/
7 R6 O- l' t1 G) j1 scp -r server.key.pem /etc/strongswan/ipsec.d/private/
% P6 {) ^2 m; I, b6 }: V- O! {+ Vcp -r client.cert.pem /etc/strongswan/ipsec.d/certs/# ]2 x$ u& b, L" M  g9 v9 W
cp -r client.key.pem /etc/strongswan/ipsec.d/private/
; @! u5 D' q, Q8 V把 CA 证书(ca.cert.pem)、客户端证书(client.cert.pem)和 .p12 证书(client.cert.p12)用 FTP 复制出来给客户端用
- I+ n, @, N6 g; z- `* R
6 A! X$ o8 j6 R3 R" ]! A配置 vpn) X9 C9 l! X% G( W. X
" ^9 f; V0 r' X0 H
先修改主配置
7 C, A  X; g. b% b# z. f
# F$ g$ e' X5 A) ^官方文档
7 T, Y# ?" t1 e
7 K. z8 S! ^0 X6 o4 ~1 h0 }1
  D& j7 X! J# m9 Z; enano /etc/strongswan/ipsec.conf4 Z4 ]: y6 K. H+ G
下面是一些常用的设置说明
0 F  I1 o4 a' K! \- u6 U
" p/ _9 v  Z+ I$ |15 W/ Z& [  J) O4 |4 S
25 k- Z2 T" G: ^3 E/ \
3+ i* n- p/ J5 Z: m
44 b$ M) p# Y4 J3 Q+ K5 q3 B) o. P) w
57 T% b2 K6 S' W' q, ]
6
3 ~- H- {8 w$ v1 B& X7
/ v& p. a+ p2 Q; m( u) g7 k8, l: \/ v. I6 R
9$ v  @: U- ]3 ]9 f" X1 D
10, E% N* e% r" V( s0 ?# }+ O
110 n% c. p: H; L. v; ?- F) ^. J- p+ G$ S3 A
126 M' M; R0 |" [9 \1 C
13
8 }  F, M( n6 ?$ x14" r! S  Q0 B  H) Z
15
3 s9 X, a# Y$ {# g; K16- T$ o/ H6 Y9 @8 @+ M0 [; s
17
* p/ K$ ?' p. X3 [$ E18
: K$ Y2 J# W' B& Y# i) D19
- L" _  E4 n  ?; G4 x20
( j, M" }0 ?; E" U; S21! I2 L9 C+ j& Z. m& m7 |
22
& f  D: D( o5 J: A$ l9 Q7 a, L233 K6 d8 ^" s$ p
24  I) I; A, x9 Z" f' U1 ]
25
8 _4 a  }2 r, N- B" Z26
. J, ]- x. A: d! [+ o27  V5 n/ e, B4 v! o9 I
28: K9 C$ q* B& \
29- T( ?* X4 k- v2 {' D
30
. ^6 b# y" z9 l9 ~, y7 ]31
2 K3 b# f( a* b32
2 T$ z1 e. j# V; U" G1 `33
/ U9 U0 E7 d7 g0 U3 Y- [' a4 b& j34
4 U/ W6 R+ m* }' t5 G, z; y35& C- K2 n' F& K+ q; U5 f  g" @
365 h( l9 n+ |; W) k# W; a) s8 l* B1 D
37
: K& m: \) y" M% r. R38
8 s) I; J/ q& z9 D# J8 e39/ k' ~  g9 F) H( i" q
40- G  ], ^( i% E7 j9 T3 K
419 B: |% e8 d9 [- Y# m. u
42
, a( p4 Z* S6 N0 V) T7 q+ d43
* Q  i) j: C) ]44' j% R: b  H9 d( F& n3 M$ }( {' x
45
* I8 P1 i! F! ~46
7 d% d) B6 O% H47
2 ?; @: ?2 t7 O, F489 U6 h1 _$ K- C* T2 B7 e2 W8 M  O
49
. ]6 F6 g8 Q6 g5 B- R# `! f, o2 J50; ]9 A  V0 f4 ^9 u1 T0 g3 n
51
( u8 m7 Z2 W, {- L) Q8 s52
8 H+ f" d# |$ S" F! A8 ?7 U536 G! j! ]$ s" f2 U8 C6 T& l, @
54( v( Q& X$ B% _6 y8 `6 ~( }1 h8 Y
55; z1 \5 H: ~- D& J5 b4 R
56; n# r' [1 e" n+ ~' s& T" V) q
57
6 F" V. u4 {, l% Y- v58* w! V4 m2 K4 i" z( ^1 ]$ [
59; Q9 N$ N9 }8 e3 ?1 F# c) c6 r
609 t8 P$ x; g3 A+ o) P; f
61( y+ e2 ]' z8 \+ n/ u# J! D5 D
62
. B2 E1 U2 e) r5 d% L63, L' f7 Y; X% F4 K" T0 K. D! U9 p
64, e  b2 B9 g) O/ P/ O/ M
65
& w% o& b4 w3 O$ h0 g66
% W; _" W; @& o2 m9 W67$ ^# y4 F# I4 o  Q4 D9 O
68: @% [* n# `( K4 @6 X1 @  l+ N8 g
69
# L  M  Y* Y+ [$ s9 A. C70
! z! t; H* q2 W% a4 J71
; a% O) B  p2 `72$ W. ^$ K9 b/ U0 H  z( h
73* P# ~% R" R  O9 F. L6 F9 o% b
749 M; R5 ?" I+ Q, F" a
75" v6 K4 V6 L6 u. f1 a' a/ C
760 J( u/ c/ p+ \0 \9 Q% d
77
& ?/ g+ H- N" E: \; ?- {78
0 p1 X" Q) {9 J* ~7 P; D/ p5 Q7 }0 P79
7 k" f2 U$ q* F+ Q80
+ G" p* ~8 a6 W6 l& ~# b810 o3 V6 u& u5 h% }3 C- D! V1 z
82
( M" R+ c7 B2 ~! e2 [83# W) A, C8 m: q* Y+ |
84
7 C4 e8 S) V5 x5 _+ M& ?/ w) @854 c) x6 i# z' @, C% n1 P
86/ V, \4 h0 e% C+ P
87
. {/ F& h3 P& O2 ]0 N5 F88
5 Z0 ?* S4 e4 N89$ F0 O8 I& w# B0 }+ J
90
0 |3 x2 A" d1 Z916 K: D# w0 l5 r: u
92
6 F- @9 a- f& u8 Q! W: i1 z6 M93- Q; Z( A6 v  [5 ?7 }& N9 ]0 ?
94( Z( R5 V, c( q# k, m- D
95
. }1 J/ y$ M5 l- C96
8 [8 B5 M" w" a$ h2 b97
' [9 ?1 g% k. J7 O98
% M- Y* F. f* ^- p; i( l9 D99- C  f2 b4 n- e9 z% m0 w7 B4 B
100
( `0 {$ M1 k# o. n2 [+ {( h4 ]101
* }8 t' J$ T; |2 [2 y( b/ Q102
5 ^3 M2 e2 o# E, }3 Y103
  f5 [" f( j2 b" R2 L- v104  l& d) o8 |0 J# y* |
105
$ I3 e7 C  m. x' |106# A7 H0 K! ?* @0 _
107
0 u& `: V: r2 z108: c4 R/ ^) L' R( x! P
1099 l! R. R/ d5 N% e7 c/ h6 o* _
110- P5 O, R% N6 }2 t  l" `
111
# a. u7 z) P* ]config setup) G+ {- K$ X) E' `3 j& M# w, h
# `2 w& i( i8 a/ `. T6 \+ Z, x  r
    #是否缓存证书吊销列表
; M$ x4 q& n; }: R5 j$ C    #<em>cachecrls = yes</em>6 g/ K) \4 A6 c0 [3 g
( k9 V( o7 ?; a5 A" b) x- f
    #是否严格执行证书吊销规则! z* F+ A1 H- g$ S" P) Z) A1 V
    # strictcrlpolicy=yes0 b& t) D  M+ ]

# d& f8 c" U& _  \8 R6 H5 w% ~    #如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.
; S1 O6 W- M7 B$ K# B2 S5 J    uniqueids=no
) ]5 B; i1 a/ V( {# s6 C3 E; w% W
0 _& k9 }8 A$ B9 G; Y4 t
" W- t% n+ v" o1 r#配置根证书, 如果不使用证书吊销列表, 可以不用这段. 命名为 %default 所有配置节都会继承它
$ K& \6 ?" Y! J) n2 m. V( m#ca %default
; |0 T5 K1 ?* I/ a& B2 i4 A
3 q" ^3 Y4 n% H2 Z1 \    #证书吊销列表url,可以是 LDAP, http, 或文件路径
9 r/ z# x/ F' K. n! R: o6 c    #crluri = <uri>+ W0 Q! w8 c5 ^; I, M) H  a, B

, ~9 T( s4 t. ]& b3 O
% a# \# @8 h; z* |#定义连接项, 命名为 %default 所有连接都会继承它7 v/ n2 _" |) Z8 m7 c4 l" `
conn %default$ K' _4 N( H, f3 ~5 u, V+ d: Q- d

0 G# h# |2 c0 c: M0 m6 v; w0 d    #是否启用压缩, yes 表示如果支持压缩会启用.
8 A5 x; |0 c% p    compress = yes
1 L" w# `4 J$ t% z! L7 w: ^
0 {) q5 h% h$ f    #当意外断开后尝试的操作, hold, 保持并重连直到超时.# |& _9 ~  j: m  n* W# F
    dpdaction = hold
6 F! u1 r7 O' q9 ]' _5 Y 4 u' b& G$ o0 B6 Y' Q  W* l& W
    #意外断开后尝试重连时长
& L* s' W- y  B% S4 T    dpddelay = 30s
! `$ [+ @$ E6 }+ }. Q   X# t! b/ e) U7 \6 K/ a% M
    #意外断开后超时时长, 只对 IKEv1 起作用
8 C( [$ O  X3 G# O0 Q    dpdtimeout = 60s. J/ v  X) B6 L( I% d1 k
0 w( f9 {* E6 d8 f' g. o
    #闲置时长,超过后断开连接.3 }; @# Q* A. E6 B: I+ C
    inactivity = 300s
& ~0 Z; R' p& K$ a# Y" z3 b5 S % O" s( j. ]9 W; u& {
    #数据传输协议加密算法列表+ i( \# a, s( I
    esp = aes256-sha256,aes256-sha1,3des-sha1!  V9 w0 d3 o3 _" ~( j

8 q3 G2 q$ N$ |& Q. t    #密钥交换协议加密算法列表
" L$ @( X9 M: W/ ^# v    ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!5 Q0 m) g) n* z$ v" p
( @9 }/ s- b, Q/ p! z9 x
    #默认的密钥交换算法, ike 为自动, 优先使用 IKEv2
" l) }2 i- s- M( m5 c. j6 D4 o    keyexchange = ike! Z3 [2 s1 L3 K1 o+ U0 g* D

6 R+ r- ^5 G9 a* V. }    #服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.( X" Z5 ~" w- ^% {; u& [: m
    left = %any
- d/ }! W0 k* T: z' W) m    #客户端ip, 同上6 j/ ?6 z2 o% B3 P* ?  T4 w2 C
    right = %any
8 Z2 I, g5 T6 c9 O1 v/ F. u / A8 |5 V. g7 x
    #指定服务端与客户端的dns, 多个用","分隔, E1 |% @; g$ {( B1 Q
    leftdns = 8.8.8.8,8.8.4.41 O4 B0 Q! b* X* x
    rightdns = 8.8.8.8,8.8.4.4; ]! B* R5 E( M, m! G

8 s3 ^9 c+ N, k    #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500* O3 E7 y* O3 a  I& v+ y0 A4 D
    #leftikeport = <port>
1 I& Y- {* s+ L: N
1 {) \+ c- C5 B: W$ r8 M+ h" `    #服务器端虚拟ip地址4 \* |" Q; I% h) V1 [
    #leftsourceip = %config" f: d3 o* C- W1 C1 B$ l5 z
    #客户端虚拟ip段' @' u+ a6 A; W$ I% X  G" r
    rightsourceip = 10.0.0.0/24
0 o9 Z6 O( _8 `6 c: y3 ]. b2 v3 e. X  e& R ( t. i+ l& x( u6 V4 X1 l5 `
    #服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字
1 h. _* [/ K  u+ b    leftsubnet = 0.0.0.0/0
2 G) |, F; D( m    #rightsubnet = <ip subnet>[[<proto/port>]][,...]# L( f7 K) U. p+ E

* d5 ~5 D3 I  `! b# V) b' Rconn IKEv2-BASE
% Y- P1 h! j1 t' z
! ~. ^. [7 S" M1 w) x    #服务器端根证书DN名称
+ f9 {: s0 R4 A/ |1 Z    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"2 ?  Y+ X! f, M
8 i! ^! k  V& f# S7 Y8 N; c+ @8 E
    #服务器证书, 可以是 PEM 或 DER 格式/ s2 u$ n! g# x/ K' ~1 ]. O) C0 C  x
    leftcert = server.cert.pem
+ N: S( V- I! H2 ]$ t+ s* U) p& A    #不指定客户端证书路径" k' I2 d1 C$ r& r* W
    #rightcert = <path>6 P3 n  U( T* g4 H' [5 O) V

) I  d' z; x; R  h: u   #指定服务器证书的公钥6 t6 B  R# Q( r/ P: g" X
    leftsigkey = server.pub.pem; U0 a7 W5 e% z! p% D
    #rightsigkey = <raw public key> | <path to public key>; C! j6 y2 G4 p

# s8 L0 L& A1 E% u1 k' H, z    #是否发送服务器证书到客户端
& Q$ Z: u( j" y    leftsendcert = always
$ V2 \0 i' n0 k    #客户端不发送证书2 N$ ]$ D6 v: @6 y% \$ [5 U
    rightsendcert = never9 f  m  o7 T* H6 z$ S
/ x& @; U$ g  ~: @+ ?
    #服务端认证方法,使用证书
! s" c7 v  D$ d    leftauth = pubkey# c  F! T4 r7 E# M& H+ R" A
    #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用
$ s/ ~4 T- z, S( _. m- G3 K    rightauth = eap-mschapv2
. F# {3 _: a  S/ ]% S0 t
4 {% {8 t% h0 E    #服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行.6 D* ?! l' `% a1 m7 S
    leftid = vpn.itnmg.net
3 o: z- Y6 t* c" Y1 p    #客户端id, 任意4 j, @) S# }7 g$ W+ j) B6 B
    rightid = %any
) ]; N% h  {) A6 F! C
) W0 e5 j/ `& u  r1 j5 M& M8 j# H, I#ios, mac os, win7+, linux
2 i! P+ i, [# A) J( k: mconn IKEv2-EAP' O& ?& |: r# u# K% C) V- X  K
    also=IKEv2-BASE, G% S8 n- O- u8 f4 Z* E5 e4 E
% L2 N! A" f4 V" ~
    #指定客户端eap id$ L/ i; v4 k1 H  I
    eap_identity = %any8 Q! {& D. W6 A5 B; @
# I, o3 D, t  s; n! \% p% E  I3 F
    #不自动重置密钥; M3 Y' x! v9 A* @6 h/ ?. a
    rekey = no
# r4 u4 A% p$ o# M; V 1 o6 F* f: k! K9 x8 ^' e" m
    #开启IKE 消息分片3 V' u5 E( p- \: L7 a$ R! @
    fragmentation = yes
$ ?  w* a9 o  Q- Q) h
. W3 Y' N6 s7 C9 b' d    #当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.' H% _7 w. B# V9 t8 U$ F
    auto = add; R( A  n0 E6 B/ r8 Z
我的设置项3 T% A3 ~+ m1 V

' p( s9 q7 p( g2 b1
, p+ V" b5 S* D' m+ e2
, \6 i# ]1 Z# U0 H3 y0 w3# t. V# e% F+ n7 [
43 g+ X4 ~. Z; |- q0 a% s# s, l. T, f
5  W/ B5 ?' f) |" [7 ~# }
6
6 T+ }5 D. {+ l! b7
. Q( n0 f0 B/ i# \8
2 p: ^; c; `1 V+ z) H90 c7 q$ f9 |1 I& O  D2 {
103 h+ l- _: F; j2 D1 T5 w. W
11$ e; s% }+ N) N# Q2 ?
12/ q, g" O6 E8 v! z$ F: |% J/ N  s4 T
135 t+ H4 ^0 Y1 T1 Q* ]
146 @* D  k9 P7 w
15
9 o; @/ \: Y0 J% `7 {165 P1 n4 {/ ~# W% E
17) @& h1 M- m6 e1 J$ f+ k
18' B4 c% t2 W' w# q2 s
19
+ r) ]9 ^/ R& W" `% J' ?3 A20
" f: Z7 ]' e/ V; U21, {  e+ [, G9 J( o! }
22
: c( n7 t, y3 K' q# ]! A23
3 u; t7 B, W6 V; |; @: ]24. u5 P& V& g! a$ H$ ?( q5 {* Q" U
25
$ X1 _- \! M" I$ S8 p) e26
0 v2 ]/ B8 K4 V& C  S& D0 E9 E27
- W$ N" u! E% e* @28
2 t" u' w* @( t9 n2 Y+ c# _295 q! M  V2 t% A: N! V8 q. A) O! ~
config setup1 \1 I2 K& x+ @
    uniqueids=no$ [) @9 Z: o. n: M+ X- b

- M6 p( n0 T# y9 i  k/ B. G$ v6 v+ L+ G, Iconn %default! X% }  F  G4 e- ~0 d! n! O$ H
    compress = yes
) ?( |; Z; b! c0 ?* B! a    esp = aes256-sha256,aes256-sha1,3des-sha1!* d8 R6 G  f8 E* m8 S4 C
    ike = aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha1-modp2048,3des-sha1-modp2048,aes256-sha256-modp1024,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!" a8 ?  b0 ~" k! D: p) g
    keyexchange = ike& |) ]! \7 `5 P% ?
    keyingtries = 1
# S' J7 j8 g  `3 r; h" K    leftdns = 8.8.8.8,8.8.4.4
; j% c9 P% ?2 Y% B# A  V    rightdns = 8.8.8.8,8.8.4.47 X$ i' I! G7 x

0 N6 S) g: A" e  |& S3 ]+ L) ^conn ikev2-eap& D2 }# Q8 x( x  B' E. E
    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"! P! p% ^) {$ D( ~3 z1 {
    leftcert = server.cert.pem  d7 J$ ~- ~6 F3 f7 k9 C! `
    leftsendcert = always# ~6 I! X& q% r1 v' p& t
    rightsendcert = never
3 h6 V) H* n4 I9 \% o    leftid = @vpn.itnmg.net
  ^7 N' t1 V9 w$ O: [$ ?    left = %any3 K9 E; C1 H, b; b
    right = %any+ H5 i% x" W. F4 Z
    leftauth = pubkey
2 X2 L' s7 \9 f2 q" X# m    rightauth = eap-mschapv2
; o) a$ }+ L. f' T& a    leftfirewall = yes
+ {2 Z+ w! f9 o5 j    leftsubnet = 0.0.0.0/0* r, A4 c. q' T. N
    rightsourceip = 10.1.0.0/16: S& `( t$ _* W  v; X' ^9 G3 B
    fragmentation = yes
( S. D3 \3 Q7 z( |5 u    rekey = no
+ C6 x% l' `& O+ w4 o( j    eap_identity=%any
, X1 H& l0 {: K% ~! o& C    auto = add
% _) ]* d% `) n" f! o5 r 8 l: l$ E9 j& c" j. m* ^
! g  ?* s1 _3 t0 e) W+ E/ T. q
修改 dns 配置2 e; z* }/ K; v" y& v! s& n( W
' r* l9 y) ?: l3 p& s9 j
v5.1.2 之后, 所有插件配置都分散在 /etc/strongswan/strongswan.d/ 目录中.
0 M, {5 S  f- L# j/ A
2 v% ^( ]; h) O6 L, U& w0 P1+ y  u6 ?8 E9 _& C1 O$ M
nano /etc/strongswan/strongswan.d/charon.conf
; a5 C/ Q! ]. l' P5 H修改如下* U% C/ p  g3 m

$ ?5 {0 a2 `  }, E) \1
6 x- P4 K8 j# O/ p( Z' O# X  E3 F- L2# _+ y& V& J3 o# j' B
3
  Z# \$ v: K  K1 b# Z, c, t6 s. j5 G4
6 }3 ~- C3 @' x; O# N" k5
& Z. n. o( w& T9 @, a- g1 ~7 I6
0 n! y0 Q3 J0 w( h7
+ @; o& k' q( Y% E/ q7 R8
1 @* N/ N' _' t4 I9
' D+ U2 A% s  `0 K" Y% Y9 ~+ e100 a9 z0 I# i0 i; [1 ~1 R3 P
11
3 ?7 ^- T9 S1 S4 b$ i) j8 v6 D: U125 J! C$ W) h$ `# V3 |0 m
133 Y) e. G; \9 c2 C
14
1 z1 h. M6 z' `& b9 g. L( M15
% G; Y1 B6 y. r( B' C16
" P7 l1 [$ A, ~$ X; g6 z17$ _/ _) J9 n- W) w0 d( E4 ]
18
! j6 i+ j! [* Z% Y19
* Y/ U3 I7 `6 N20: l; }4 {  Z: C. c/ c
21
+ F9 M: K1 {# ^, ~$ ~1 S& a; z22/ h3 m- j( \' e. K* h7 n% v& }
23
8 g9 {  r7 F! b$ q4 fcharon {
3 L; e/ U8 n5 c6 Y9 |* i+ H    duplicheck.enable = no #同时连接多个设备,把冗余检查关闭.5 ]/ o# l( B( n

4 B6 W4 h2 S( K0 y. F    # windows 公用 dns
' R* G5 M5 R0 z  m- l7 f    dns1 = 8.8.8.8: [+ p; f4 r6 A6 v% o' a- f; k
    dns2 = 8.8.4.42 ~! I3 J( ?  Q5 X( A( _0 ~
- M4 {: [: s: ?" |! }
    #以下是日志输出, 生产环境请关闭.
' L% N  C, W- K7 V3 n) p! G% j* H    filelog {7 Z# Y7 A( O) V. `$ `/ y' k: Y
        /var/log/charon.log {0 p% p* w1 B8 ]4 ]
            # add a timestamp prefix
" o& M& {0 G8 \* g( Z, Z7 Y            time_format = %b %e %T
9 U! O! \$ `8 P8 [* {3 z! U) Y            # prepend connection name, simplifies grepping
" B" G: L4 G' g) E1 J2 R4 l            ike_name = yes
0 N; _  C/ [9 I4 P0 H            # overwrite existing files
' y; D9 \$ q$ Z! S8 i+ k1 |& _            append = no, n  N. K/ C  T7 d  B+ q3 X6 F5 r
            # increase default loglevel for all daemon subsystems
: F$ u, A( v! T' i/ [            default = 1& O$ \* b( V( N% M- t0 _; W' a
            # flush each line to disk
3 @' S& p4 N' ~* K: F5 j0 E            flush_line = yes
8 P+ O5 A, O" I3 X        }: Z4 F7 M+ G3 k" s, w
    }3 T* h/ x1 t7 j; e5 q
}) y0 E. X, h6 a5 U' d" c
配置验证方式的用户名与密码  X% M3 C2 F% {! b
0 Q8 d: _, D* o! y+ r
1
* _+ M7 b; M8 i" |& Gnano /etc/strongswan/ipsec.secrets
; F1 F* \4 c. K: C) j, Q0 J, W: Y9 @下面添加用户
- x" h" s# ]$ Y! b
! H* s# D. N; c$ M) ]1
6 \# d% G* q. f; h* h) S5 H. i$ L2
8 l5 ^/ ?% v! [( {3
- }: D, e( }7 n4
& C& @0 G. u& E9 A  Z# x/ w5! ?8 o  n( W, G
6
6 A; U/ w# w/ l6 x) V' N7
5 C2 r( l: L- a! K) T8& @1 M2 _5 k5 V# G0 L  b
9
+ W! V( u& @' f& ~; g10
. u; H. c* m' }9 a11
2 T! k2 z# b5 c9 B12
3 M- L$ _/ z; z1 b13
( {# Q* j" o1 s' m3 |& R14- H$ a) y( \7 S# Y# [
#使用证书验证时的服务器端私钥& J7 f1 r- v8 [4 z& w, G5 U- j- ?. C+ `
#格式 : RSA <private key file> [ <passphrase> | %prompt ]
) g  `' x5 p! `9 w% K; m: RSA server.key.pem
$ J0 y" N$ a4 R7 A; T + x% [( ?3 s/ W- `0 C+ ~, q
#使用预设加密密钥, 越长越好
5 v8 u9 z7 w1 z3 e" ~( ]( n#格式 [ <id selectors> ] : PSK <secret>
1 Z) i9 U: i; }1 G, G. H%any : PSK "预设加密密钥", m- p! ~& [- g* i. Q; c
. E4 l( j7 ^8 `
#EAP 方式, 格式同 psk 相同
$ p8 f, t) m2 L" I, r9 j, B用户名 : EAP "密码"
+ D* u* O4 R2 _) N- S8 a
7 i. Z4 t# ^( D( f- x. F# _#XAUTH 方式, 只适用于 IKEv1- }7 S" P$ k. M- a3 y9 s6 o* M7 F
#格式 [ <servername> ] <username> : XAUTH "<password>"9 B& R" H7 {) x- F
用户名 : XAUTH "密码") s& N3 j9 x0 {+ L
开启内核转发
' v* Y' w' B* s& |8 ?; [8 m2 t3 T" A" m0 ~  o
1
; I& T9 x9 p, _2 M/ Znano /etc/sysctl.conf
& j/ @  a+ Z0 H9 L/ o/ ~写入以下配置* x* |' k9 r, a* j7 x4 q0 L

8 k4 r1 B8 e0 C$ W3 h, d1# R% F, E4 ]4 K) w2 Z
2
9 R3 v/ U3 y4 D$ W9 H6 [$ n+ S3, F9 Y: A9 d4 p5 s$ o1 ^- ~/ ~. e
# VPN
7 h/ L) N# K% ]net.ipv4.ip_forward = 1
+ r( d0 z( l1 Inet.ipv6.conf.all.forwarding=1
: d& E2 O# C9 p  W保存退出, 执行下面命令.
: r1 h. O, A0 V) X
( O' c# i9 m1 z" z+ m1 m" i14 C6 ?0 g& l- s: w' Q5 z
sysctl -p
2 J2 K7 A: ~4 G5 i  G. J
! z. K+ W/ J9 }, A( O; m0 g" h! G; K( v6 f7 m! F  `, t
配置防火墙7 A  o) ~: [% ?: J4 V# }

2 U: n1 W4 [7 kiptables 配置方法
, N& Z- x! c2 G$ w( {7 u- z8 k# G1 p, @) T8 |& k+ {
将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.
' ?1 x, I1 f( \) {# h
; s$ h4 T% [5 A1 N1
# c& U7 a& Y) U2/ H9 m- I' U# \- K4 I1 z0 ~0 ^! F+ T
3
8 W- k& C) b9 l3 b; a4 M' j1 K6 t4
% e) Z# |9 B# ?8 q5/ e( ^% e' N5 g5 N$ l* G, O4 W6 l
6' Z8 d1 s, e5 z# V: g
7( I9 A5 v, i1 a
8
1 }8 \# E/ h  x* x9
+ K( d. ^) m, }7 _, Y/ P: k( n% G) E10; R+ @! X; C9 O6 q* v
113 t/ V! V& V% H- G, j; r! Q% {
12
3 ^# K$ M) C; J2 S: J. q13
! Y  Z, c4 l5 F  l14# m3 J5 z  s& v5 N5 ~; L
15
( j1 E% H/ n6 |. o, D( p16, m& O5 y, U1 s' }# Q  f% _
#开放端口. d+ p. Y2 x! y) G  p
iptables -A INPUT -p udp --dport 500 -j ACCEPT
1 t7 y' W0 [' ^) u: k8 niptables -A INPUT -p udp --dport 4500 -j ACCEPT
4 Q( x; S8 j9 `( o1 n" i . w8 ~( ]# ]7 s! ]
#启用ip伪装
8 T' \$ v. R  d& x6 N* yiptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT' ]4 i) h, W+ G
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
; }  ^) V; V: X, D5 Q7 X; g
0 O# E0 \& K; W" P5 h2 r0 V8 s#添加转发0 I3 |0 ~9 U' Y
iptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT9 x; D; {. a' e& o" u1 w9 F+ t

# k  _- |8 ~2 X#保存规则
  d# i0 S6 l' V; c1 Jservice iptables save
9 A' @4 I  X2 H ( P0 M: [* a4 }! H; g0 u! Q
#重启服务2 q7 K$ n6 G9 w( |  k2 P; W
systemctl restart iptables
( Y0 @( F" b* G如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.
- k2 \6 ?  e) S- Y) I3 J; c. |. a( z' ?: _
13 h5 M$ ^; {2 a9 B
nano /etc/sysconfig/iptables# [( P) q+ k3 j. O4 x
将下面的规则部分贴进去, 不要整个复制粘贴,  根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.. @( g, Z$ ~5 D: w
$ Y1 t# f5 q% s. b+ r) r
1% p8 y) Y) z/ c, F7 X
2
! |% W* z; a7 [  @3" {. W% N4 A8 u! K9 e+ S( O( c
4
# Z: z/ v# d7 d/ N- a! u( P5" B; Y3 V1 K3 N/ @, z) e( X6 P
6
0 ~0 X% Y' z0 ]: O0 j4 ]$ \7
2 K1 Q, ~2 V* Y; P4 j8
5 M. _" [9 P! P9+ N" |: f/ {; n$ e5 [$ u1 I
10
! g6 d" O+ Y- s+ L+ b11; J7 @5 }8 i. _2 G0 K# w) R$ ?- Z
123 a( q# Y4 {6 P" S# P. B
13
  a* ~/ I& u; [6 n: `/ a6 d$ g& X14) O, I5 }, Q" f, S* h/ P- S: _
159 B. n6 Q% P' q
16
9 L  N; N0 \# n. m173 r$ H( w0 [! A/ X; o* O
18
5 e' N; V5 ~9 \; @8 G# u$ |19
% ~, `+ {! |9 p4 d* A/ L3 A: F  |20
8 e4 G; A/ G7 d' U2 g21
7 @+ g2 \' j3 Z, g# x$ q6 T, H* Q22, K- r, b/ P( n' z- _' [
*nat! i: W% v) X, Q  W' O. b; V
:PREROUTING ACCEPT [0:0]) o2 N: K# Z6 |& v' N
:INPUT ACCEPT [0:0]" e+ I) @% t" ]; C1 ?- U: K( v
:OUTPUT ACCEPT [0:0]( _$ J6 ]3 I, w  L
:POSTROUTING ACCEPT [0:0]
/ a* \2 y8 W) n- P5 X1 g, |# d8 Q-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT% F' R" L" E# N% k! Z
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
4 N/ M9 T6 W5 w8 Y/ }) \. i! N. ZCOMMIT  j+ k, E4 q- _3 E" q8 P! d
*filter9 p& o6 s6 C. y0 R
:INPUT DROP [0:0]
6 r6 J- m; I7 w:FORWARD DROP [0:0]
( t, h: a; x* R6 ]% N+ i9 g8 h:OUTPUT ACCEPT [0:0]; x8 ?; r% @- ]- D: z7 \
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# @) s; Z1 W" G% n$ @& S2 d-A INPUT -p icmp -j ACCEPT# ?0 |+ d) j; b% ^. O  e  X6 F5 S
-A INPUT -i lo -j ACCEPT
6 X& \# K1 f7 {" F0 E- |-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
2 _9 _) j' i/ Q, N0 n, j$ H-A INPUT -p udp -m udp --dport 500 -j ACCEPT) q% n' k$ x0 Q$ Z2 E. U" D. D
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT+ ^8 E6 a: J2 R8 h: U, {3 c' d
-A INPUT -j REJECT --reject-with icmp-host-prohibited) {5 x9 R+ e# }
-A FORWARD -s 10.1.0.0/16 -j ACCEPT
3 U- {+ k% D% Q) u1 C3 S' L- n-A FORWARD -j REJECT --reject-with icmp-host-prohibited% ~* F  C$ l+ H  V$ g# y/ {# D6 {
COMMIT
# n; I/ I3 s1 u! ]保存退出, 重启 iptables 使之生效.
" J  q( B1 e0 Q( \0 G) a* f3 L0 e8 |  a
10 o1 X- y8 @. v
systemctl restart iptables, C8 b+ ]1 Y5 d! Z  l4 I
/ w+ V" r  m$ R* d# h
! }  a7 Q; h# o6 }
以下是 firewallD 的配置方法, 使用 iptables 的可以忽略.! ~1 m0 H/ w' B/ F8 _
) U5 N# }% T6 x5 Z
firewalld 介绍请看 <<CentOS 7 firewalld 动态防火墙介绍>>
; m9 X5 P+ T5 ~
, Z0 u9 ?9 z2 {/ A* h  H5 ~首先将公网网卡添加到当前区域中
  |0 |- e9 G% n. a9 U2 ~  n; }9 n9 F% r1 z+ Q$ c; Y6 q$ A
1* S" X6 }$ V5 J! l8 D3 n
2
/ \8 c( V: h: Q) S+ p8 }% Z#查看所有网卡信息, 找出公网网卡8 Q; L4 P2 T6 ^) @
ip addr- j, a) x3 U$ k1 H6 I6 K/ K8 \
编辑网卡配置0 f! x- I. w: {1 g, v: k
8 e' p9 ~8 A7 r. u+ ~
1
2 U. m1 q+ b# ~; m7 Enano /etc/sysconfig/network-scripts/ifcfg-eth0$ x; o$ {: G  S8 F; A
在最末尾加上区域配置; L' s+ T2 ?" Z+ c
: U7 x8 y3 g" b' p  v) _5 i( c
1
2 M0 D" F) H4 S5 X9 P. O5 p2 G, MZONE=public( c/ X) K$ r. M+ _
保存退出,重启服务9 S  A+ I+ F) g2 O9 [0 l! T. _

6 U9 N5 H; _2 \% G12 \# R& n1 p0 p$ X; Y
2
* @0 |" M4 b3 e: i, C& w6 M8 x; Rsystemctl restart network# G1 g+ P) D. @
systemctl restart firewalld
% p; |, J! s; q) V( Y' k" v# V , K! i) Q5 R9 U

: K( c, q6 W- e* t& _1 m然后新建一个服务# }" x) `: m  G- ^7 \6 t' H

, U; `: `" q' R" ~% V2 w$ p/ ?8 a1$ R! Y, k- N6 Y; m" v, g* V  d
nano /etc/firewalld/services/strongswan.xml
9 o4 s+ }6 e3 k' X填入以下内容# I8 k' K# q1 E
- v  ?' p6 s6 d7 M+ |
1
2 H7 N7 x. I1 [2 w& G! N* v2
+ v$ B, b+ d" r6 ^3/ @+ m4 `% A" C8 z# f6 a+ ~0 i5 u) N% v
48 [+ M- q, e# E2 K' c# o
5
3 `7 S0 N5 A3 y4 n3 I, k66 D% a2 U# `- L4 z2 ~1 \3 L
<?xml version="1.0" encoding="utf-8"?>9 b7 M+ z/ l) d) l  k& a# X1 L# x
<service>
; j, k( @# L% C3 r* _9 p( Q9 @% E  <short>Strongswan</short>
! S# \4 N- d; x3 M/ t, y  <description>Strongswan VPN</description>0 g) Z6 W5 n8 U% [: E; f
  <port protocol="udp" port="500,4500"/>0 @9 q+ I6 l7 c
</service>+ |) h3 T9 {2 J' _# z! w! e
保存退出* G( a: J# Q3 t+ h/ `
- f; ~3 r5 [6 L/ V
添加服务到当前区域, 开启转发
. J+ E' K3 j# D. p
  y" a# q" Z0 \1 g1  P% T" O6 ?6 c! g
2" Y' w) {, W8 ~9 N# t' C$ K
3
4 ?; \; e5 e( Z& ]40 Q( z5 P  p) P: b# K! O
5: B7 @/ b, C* }
6$ z" n1 C$ o7 |! X& s( N4 m
7
: u$ U; p& C% R$ U8 O8
; J7 q# I+ ~5 O9. |+ h, N: f6 N+ Q8 V5 m
10' m9 }! _3 @  y( f  v
11
( Q4 S; {! K& V( o125 Q/ A' X; V/ x- c& |) Y& a
13
8 u/ D: U8 p, X: \" ?* M# t3 Y* ^3 B14
) ^5 q9 Y# P3 h) S#以下命令没有指定 --zone 参数, 都是针对默认区域 public6 W( m( n) u& V6 i. D0 Z5 g: Z) k
#为区域添加服务
/ t8 y' Q4 Z8 w# Q+ Z8 qfirewall-cmd --permanen --add-service=strongswan9 E6 h# L$ ^0 M9 W# \
4 d( }! {4 q3 Z; ^: x

7 ~7 v1 W3 H" _#启用ip伪装
/ P8 e2 a& {# w/ Pfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" masquerade'$ e8 K: |! C( q2 G; d2 [

& b/ P# u5 B) G$ h#添加 nat 转发9 k$ a, L6 R; y8 |2 s2 H" ?& Z; u
firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="4500" protocol="udp" to-port="4500"'8 [4 _* W+ X0 x
firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="500" protocol="udp" to-port="500"'3 S( L& n0 {3 r/ b% A: C

: f. Q1 q" [" Q2 M3 w' V3 S#重新加载防火墙配置
" w- {* s: t6 hfirewall-cmd --reload
4 S6 i4 C6 G! x$ u2 ~/ k
3 c8 x  B3 K' X# @3 e: W- v2 o  {7 |/ A: W2 R1 v6 _
除了用 firewall-cmd 命令外, 还可以换种方法添加上面的规则.
6 \, ~5 j( j0 _$ w
7 T# y  t) x/ w  b! G. J' O1
& Y) [: M1 A8 e2 t21 ~! u/ _! T/ }# [, k
#编辑当前区域的xml配置文件- d( o. @8 j2 Y& V
nano /etc/firewalld/zones/public.xml
4 j6 x3 W% x: f$ O! _' x改成如下内容, 我这里只开放了 ssh 和 vpn 端口, 其他内容根据各自的情况修改.; o' f. I% m2 j! q! e( k2 `: }. k

1 Z2 E2 B, ]$ U9 [) \/ j1
8 @8 q9 }  i7 c  e2 C9 B2
4 A( \  C2 ]* V9 i' C3
. F* T- v- n/ o  H4, l. y- X6 X! a* d
5
1 `8 R& W4 g# b5 t, c+ M6
" ]& Z& Z% _: D# [0 p, X7
- d3 I& T) Y- T( Z, F0 w" _, t6 a8
- }" C& U8 q" x$ o9
( r# x/ y! [5 d  _10
' L% |5 x8 m" R; r0 Y0 ]115 x. X& ]" K1 x+ G
12
5 A0 v% N; k6 g13
6 R5 Z7 a( K- Y  R- X4 [14, }3 I- t, h9 c. o" l
15
+ M- o8 B7 M2 I) p16
, Q. Y) ]! A8 h0 v17
8 A* `& ^2 C. U7 g18
7 v1 Z5 F. \/ V5 x6 J% a19
1 D" p  o/ R1 k% B! g. A* z<?xml version="1.0" encoding="utf-8"?>9 E2 q$ l5 _* l& {. J: Z5 `
<zone>9 x% b% Y6 u6 D/ h  D
  <short>Public</short>! N7 \0 ]% G& B" g8 `
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>* W. l* f( r4 }; n8 t1 a
  <service name="strongswan"/>
0 P( p  E% ~% T* D  <service name="ssh"/>
( t: S, C7 [8 j1 t  <rule family="ipv4">
, W3 S( d2 U: \8 c8 Q% p1 x    <source address="10.1.0.0/16"/>& e7 Z. x# J2 j8 @4 S
    <forward-port to-port="4500" protocol="udp" port="4500"/>
) e9 X0 U8 h. H3 m, ^( C( i  </rule>
% z* ?/ ?, K  X1 e, T  <rule family="ipv4">; q, |) k+ Z% R1 A$ b0 j( N7 c
    <source address="10.1.0.0/16"/>5 _/ x& }7 h) u9 H
    <forward-port to-port="500" protocol="udp" port="500"/>
& `  J* v3 i2 ~" U$ D! \3 ]  </rule>
- \- U4 m! s! R& s* C% ~6 F  <rule family="ipv4">  c/ S5 E' t! S. Z+ b. i
    <source address="10.1.0.0/16"/>
, _6 p2 I" u. l    <masquerade/>
# `3 W% G: O; L0 y, O8 t/ S7 o  </rule>9 ~, S' S% j" _/ q
</zone>+ y$ I4 u& A, q7 l2 ?9 ^% {
1
  ^' y' T5 u6 d* z4 d/ @+ H0 }2: H3 d+ M0 [0 J0 a2 a
#重新加载防火墙配置. W+ z) r1 c: s2 k
firewall-cmd --reload
! C) g+ C! t9 `4 u ' E; \1 g) m6 M& M  x$ B
( ^! E  t0 \5 B# x7 G6 R( q* i
配置完防火墙后重启 strongswan 服务
$ C" f) G: y# M3 c7 B/ d" d3 i& `  q9 }& _- o/ v
1. V# c3 v$ R& O
2& c! l8 G( U) P9 S, g) F
strongswan stop #使用strongswan 自身的命令停止服务  W3 S. e$ ~( t) Q. `5 u
systemctl start strongswan #使用 systemctl 命令启动服务
5 o; L! O) z. w6 g# l4 m! M! d, l. I6 O这里不使用 strongswan restart 命令的原因是, 使用这条命令后, 再用 systemctl status strongswan 命令得不到正确的运行状态.
2 D+ e, C8 g9 S  T9 M4 U- i& k( j4 M  X! b
至此, 服务端配置已完成.
! N; Y8 f8 U& s1 y  X& i
9 p4 Y9 |/ W- P+ y
) [# ?3 O9 p1 ?8 K0 h! Q- c
! V# f' W; B& ?7 h0 z7 A) ?为了学用 firewalld , 特意用了两天时间研究, 学会了才发现, firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.
2 r* p& f8 |! }8 k/ u0 u: i
* G; K) K' L; [( q客户端配置/ n  x7 W0 B9 T9 C. G& T

& B2 I; Y- l( r2 @ IOS:
; ?8 c+ v3 ]6 K, P3 N* d2 N( C( p# w9 E3 K2 g
先导入 CA 证书! k: I/ b  M) |# r& J
; X: t" {2 E1 ^: v+ h/ |
将之前创建的 ca.cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.% `7 j8 e4 V+ [$ A/ K% g* A/ G; X
/ i8 ~% x5 K# A  U; P- L) d' E
1. 使用 IKEv2 + EAP 认证1 m" T! U8 H$ U7 E; {" L( P

$ u8 D! p  s: z2 n找到手机上 “设置->VPN->添加配置”, 选 IKEv2
6 E; ^% P. ?  O8 X' H) ~5 ^, @0 Z8 w5 C% ~+ F1 g7 T
描述: 随便填
0 |; H+ i3 Q0 f& E服务器: 填url或ip
& P/ [$ B! P' R- u1 _远程ID: ipsec.conf 中的 leftid, t' {/ v, a& ?3 L
用户鉴定: 用户名
2 b9 |$ s  r/ [6 ^" |- A. L用户名: EAP 项用户名
/ f* @# W  c2 ]! Z  X8 J9 A$ n密码: EAP 项密码4 b' t( D( b3 A; P' L7 Q
2. 使用 IKEv2 + 客户端证书 认证6 x2 [, \3 C! V' O  t1 w2 p  j
1 W  T0 N2 C& c; n" e. P
把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开.  导入到手机(此时需要之前设置的证书密码).9 k% }9 [) p5 `

4 u5 t; M5 J- q6 A: m6 J找到手机上 “设置->VPN->添加配置”, 选 IKEv2) g( K1 m. i, L6 u, d/ X6 J

4 J+ Q6 O5 j+ s/ h" A  o# ^描述: 随便填
  C( c9 y4 Y4 g8 @服务器: 填url或ip
8 X9 C% B8 o4 w! G2 I# n& u远程ID: ipsec.conf 中的 leftid
! X( {+ c. \/ d/ `% s6 R* N用户鉴定: 证书3 c+ J% ^# e0 {5 h' j
证书: 选择安装完的客户端证书
6 ]* x. ^6 t$ J/ @' H8 ^. f3. 使用 IKEv2 + 预设密钥 认证, G, u0 I& `7 m! d) \: J7 a
) g% ?) ^6 I, `; ~/ z, `- [+ L
找到手机上 “设置->VPN->添加配置”, 选 IKEv2
% R$ O# W% [4 L2 F9 @1 W: h8 r$ `, A8 q% D' C. ^
描述: 随便填
1 X2 S% r0 }7 I. _6 Y. q服务器: 填url或ip0 @; \% z4 C; w, K
远程ID: ipsec.conf 中的 leftid
' P; |" D( F1 I8 U3 z% C$ U. `用户鉴定: 无
! Q0 [7 J" c9 Y/ U& f4 B使用证书: 关
* J- [3 K( g5 p4 `& Q& S5 ^密钥: PSK 项密钥
- t' Z% v& d% O: l6 [) oWindows 10% ?% U9 f4 O# e5 X6 p+ G( V! x3 v
. C/ m2 A( [4 h  ]
导入证书:  u  K5 f- r; M. t+ z( F3 X7 x, `9 O

2 K; {( }" y$ h! m; `将 CA 根证书 ca.cert.pem 重命名为 ca.cert.crt
* e4 c% j# [" D4 o" U) b5 Q双击 ca.cert.crt 开始安装证书7 m7 B, Q, l0 {& X( L; u3 |
点击安装证书
( w4 H5 [& s. S1 ~; r; m% o3 O! j“存储位置” 选择 “本地计算机”, 下一步
2 a8 z7 V( }3 Z+ Y- n$ v选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成.* r$ G7 n. W% S) ~& m6 u! ~
建立连接:( _5 _# C+ e$ ^$ Y. j8 G
9 x0 p2 [& ]5 D$ `$ C$ F
“控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”$ A3 y1 w+ }; T
Internet 地址写服务器 IP 或 URL。3 P- ?5 r1 q2 J4 u; `2 q
描述随便写。2 {- W" F) I( w4 @0 V: G& L- T
用户名密码写之前配置的 EAP 的那个。9 n  ~% @$ _  S, s2 a! _' b) J
确定
& |+ G, y0 M. M转到 控制面板网络和 Internet网络连接
; Y1 F* B, X3 W8 O6 o# L1 x在新建的 VPN 连接上右键属性然后切换到“安全”选项卡
: {5 |" }% |' [% OVPN 类型选 IKEv24 p/ Y5 f2 d" S+ k7 H3 p0 O, N$ s
数据加密选“需要加密”# M  M1 x( T1 o' m. }' n
身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。
  ]" m8 b  u1 I+ k9 A2 y4 [再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.4 t8 b( ~2 R2 B* z1 C
点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出.
9 i; u/ d. g* QVPN 配置完成
, U9 m5 u' |1 ]" N. B1 J- f; q5 q
# N+ ^: j1 n( EWindows 7 导入证书略有不同1 T- J5 }" F; J

2 k, R5 T: Z/ a4 X% Z+ F! G% p. l开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
2 |6 G" \4 K" q! o; l' u「文件」-「添加/删除管理单元」,添加「证书」单元) L$ @3 a$ K2 a3 M" F
证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。5 Q8 }" o4 ~( A- k4 s
在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。/ q1 @( L2 K1 M  y
选择 CA 证书 ca.cert.crt 导入即可) _) N6 T4 d; i/ F/ Y1 R
注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:18 , Processed in 0.041279 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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