找回密码
 注册
查看: 4827|回复: 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 服务器配置:  n1 Z: Q4 V8 e1 i9 C
; h& |9 a8 E: i
CentOS 7 / 512M / 20G ssd , $5/月. 详情请看 这里6 O: h8 M' J% B" E! h
禁用 firewallD, 启用 iptables.8 M1 `9 t) G% L' X' ^
strongSwan 版本 5.2
$ C) D4 V% {; Q; N0 i( Axl2tpd 版本 1.3.6
; e' V$ H  L1 w4 X7 m$ f. \安装 strongSwan
4 i' T! M6 Z4 Q& I% X
4 c- ?: k+ Y3 d) n" C! F- WstrongSwan 的发行版已包含在 EPEL 源中, 如果没有添加 EPEL 源, 请看 <<CentOS 7 配置 LNMP + FTP 环境>> 添加 EPEL 源.& k' m7 z) g; S+ q
3 A( H1 x8 ~9 j* M
添加完 EPEL 源后输入如下命令$ V6 i  F# h+ z8 A$ m
+ C  Y6 e8 X& z: Z0 B3 K% t
当前为 5.4.0 版本, 官网上最新为 5.5.0, 但是需要编译安装.6 N) H( y# i; {" X. r9 m# x
0 |0 |0 Z5 O1 L0 J7 Z& m4 O0 \
1. r# `- ?% l- j
2
7 Z: T% v% @! z6 L* l3
# M5 t" Y, I4 |+ N: X) F4 q0 fyum install strongswan
9 r' {# Y  T/ s: tsystemctl enable strongswan' L0 x9 K9 l0 p2 m* B! q
systemctl start strongswan
3 b: y% P' \. P& M4 a' {* O' E生成证书& q) t" z: B' ~; \: X8 B& ?

! p4 N8 d' i& q9 {生成 CA 根证书: P( d7 w8 {5 u% M3 v; k; w- N4 b
8 B) d1 Z/ }2 J' ~: \; s
1. 生成一个私钥:+ K& h$ i' I4 W# \+ L) ?

1 O# M1 P$ D4 [! q. }2 o, s1
# L. h6 U# t7 J/ {% H! vstrongswan pki --gen --outform pem > ca.key.pem  x: R: k% ]9 B2 @
2. 基于这个私钥自己签一个 CA 根证书:, [% Q, e# |; Y: w1 ~9 t
# H, {7 l& l; J8 U: V
1
$ @6 }  [  j' Jstrongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem& @: A, P0 s/ v- ~
–self 表示自签证书
2 R& \( X' C# `5 i5 Q" r–in 是输入的私钥- j2 Z3 {; T$ @- j5 R1 A
–dn 是判别名* n0 [8 p7 o$ T

* t7 T/ I- F# L; Z! G8 V5 ?# jC 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名, P9 a! R" H& z9 {( J1 U: U
O 组织名称# C# R9 o7 n5 q
CN 友好显示的通用名
& u! I7 q* O, |9 |0 Y–ca 表示生成 CA 根证书
( P: d& l9 Z1 X" i/ P) U4 A. K–lifetime 为有效期, 单位是天  P8 Y# \3 ~" m3 }5 R# X# x' U- x2 ^  T

6 o7 a7 F; S! `3 ?+ Q) o5 w. ~生成服务器端证书  O" N; m: [2 b; T+ S5 ^

6 q7 @& a# V( w/ O; F! `* J* y; L1. 同样先生成一个私钥
$ X: ]2 y0 s! P2 X3 c
7 V- j- ~  t8 g$ X/ H0 d+ b6 W1
; d( C+ H) v7 s& K8 C, I$ _4 zstrongswan pki --gen --outform pem > server.key.pem% K' R2 g( A7 H& K7 z0 c
2. 用我们刚才自签的 CA 证书给自己发一个服务器证书:" D0 L9 {/ N4 `8 u9 f6 Y- `

* K0 H& \2 a" ~. B7 ]1$ H2 q2 c8 }9 L( u8 h* x
2
5 _. n$ A* k4 l: U$ s3  q1 }. R, Y, M3 @( S
42 c' a2 ]: r; E7 c7 a2 F3 v
5
$ r- _% ?0 m, ]1 V8 K7 r! }4 ~#从私钥生成公钥
' k: O. x* u) `2 @+ a; x/ H/ O$ F8 k7 Ystrongswan pki --pub --in server.key.pem --outform pem > server.pub.pem
/ V8 z' |" Q" M; t7 B* W4 B, m- p
8 X( O6 ~6 @6 ^6 s#用刚生成的公钥生成服务器证书7 D9 b8 H8 p5 q+ J! F& O6 c; M
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& r8 Y4 e2 ^8 o1 u8 o. E8 x  ?3 w* t
–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。  u$ p5 O2 U+ \+ s; q8 ], ~
–dn, –san,–flag 是一些客户端方面的特殊要求:
" [$ m; o1 `0 b9 Q9 I( u" F5 Y! [% J$ @: `8 c
iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;- h' B! F$ A' l
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;
7 U# @& |0 T3 s5 \1 K/ I+ X; q非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;0 J' L$ V1 T: L$ ?  F  o/ K
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。5 p6 ^0 F6 z  P- U8 s2 d- v
生成客户端证书(可选)4 e! x# m+ J" ~. l" m4 ]
' r5 y; x2 q4 I) J2 M7 A; K( v
客户端证书是在启用客户端证书验证的时候, 用于验证客户端用户身份的. 每个用户一个证书. 如果需要很高的安全性, 可以用客户端证书, 一般情况下, 不需要使用.9 W" h" _( S/ X8 \6 H, C

# ~3 v0 p* p, b1. 依然是生成私钥:5 H* A  \& k- l" s4 V8 J4 ]

* i' K1 J6 C2 u2 L" a) A) q7 Q8 X1  w* l; F& H! N& g" i  g* A% B* k
strongswan pki --gen --outform pem > client.key.pem5 x1 ]" h6 s  M* ^7 ?( t
2. 然后用刚才自签的 CA 证书来签客户端证书:
, Z% T& n7 j$ R0 o  P% y# y2 Z$ v
* D0 E+ k7 n( v/ e0 x2 \1
4 S4 u3 W! ~! j- M+ E8 E: m2# n# I# f: w- N" O
30 o" p: B% N4 {: [; O" S, r3 c7 t2 n
4( e: L; o: |9 d. ?, j3 |
5. b% A; `) b8 v- W
#从私钥生成公钥
3 H/ E( q4 y: P6 V8 O  vstrongswan pki --pub --in client.key.pem --outform pem > client.pub.pem* a. Q: B3 w9 n9 S
( }6 I! y6 g7 h
#这里就不需要上面那一堆特殊参数了
- T) E. X# [. [- E: l  d$ ?1 istrongswan 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
& q0 ?* d& `5 }8 l# A' K打包证书为 pkcs12
' j4 s6 f( ^8 V6 d; z. Y
& n" I$ y: b$ q% M3 O1
2 {7 {0 q9 ^; [+ q( i  xopenssl 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.p128 W8 T/ c$ o  X$ K
此时会提示输入两次密码, 这个密码是在导入证书到其他系统时需要验证的. 没有这个密码即使别人拿到了证书也没法使用.
0 R5 Q9 K# _1 k% w
* P7 V! Y* y) D3 V+ W: z安装证书( T: |( v; Q. O8 Y9 N: ^

& }% h; f, @! E  {& Z1
$ M* v0 e; Z7 Q) R2
" G7 l+ \$ Q  l& F1 {3
. i/ v* [3 C  b" p4
* Y& l; L7 q" t5/ a% p* }, n8 }  _7 l
6
. J1 G8 D) z+ q) Q7, u- u  q1 f' v$ v% [
cp -r ca.key.pem /etc/strongswan/ipsec.d/private/
4 T; Y% e- h# fcp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/' L) `! p8 b& C) ^% g- ~# M) T
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/  I, Z2 U) s! r- M8 P
cp -r server.pub.pem /etc/strongswan/ipsec.d/certs/
; Z, o% I9 Q6 ?1 r$ Dcp -r server.key.pem /etc/strongswan/ipsec.d/private/
( d/ p4 Q& B6 a" ]" v  Y- Ucp -r client.cert.pem /etc/strongswan/ipsec.d/certs/, T9 C! Q2 e8 m, [9 \% H
cp -r client.key.pem /etc/strongswan/ipsec.d/private/2 X% G. E: ~3 `( W7 D% i8 Z
把 CA 证书(ca.cert.pem)、客户端证书(client.cert.pem)和 .p12 证书(client.cert.p12)用 FTP 复制出来给客户端用
  J. C, O! \* @( Z6 V7 ^
* S2 R7 s" x, X, J配置 vpn
6 H0 K" ]3 j2 b; Q, z0 D
' i- v, Y/ U2 Y2 k" Y先修改主配置/ ]8 C* g$ i7 B: O" _" S
. ]0 p2 w/ w2 u. K. j; K7 |
官方文档
" ?4 l5 A4 T1 \+ Y8 j
( w7 u' s5 y; l+ ], S16 s' L: x, c3 e0 h
nano /etc/strongswan/ipsec.conf) u' N" ?6 s4 H9 c& A- b  z; W
下面是一些常用的设置说明' N6 L+ @( O  N0 ]
& ~" c" R; l3 w/ g* @
1
& X0 f1 m1 t: w2
1 c5 ^5 i3 [" a; L3
9 q% |2 \3 s/ n0 L$ d; _4
) S4 `! n3 G- A- t+ f5
  \. C5 B- Y2 S% Z- y6
; P' i7 C  K; A7 C0 U7
: @$ X, v3 {+ }# e/ C4 ?8: \3 z: }$ R! L, \/ u/ |" |
9
2 Z; D" |" M6 O% ?" `; u0 C10: f8 n5 k' S6 n: I4 F
112 X" o' p" a' h' |* Q
12
9 I* G- J9 j! ]# J- Y13- ?( z$ V$ h9 G6 k
14
$ P3 q2 D$ ~: j5 _/ r. J153 I; L( M# t9 ?: h; ^5 A7 J, x, \' L
16
* g/ K# ?2 V3 @- A4 r174 d" r2 j' V5 p& K( a! f1 f2 i# m
18
4 Y7 _  r0 O1 z$ Y$ ~19
0 E7 \6 u6 H0 l) h. n; ^( ^( E0 F20- ~5 i: C8 P4 A" P* P& p' `
211 r5 O7 t6 B" o" o
22
: S; ]& h+ q7 ~; g2 [( e: l& J1 n23
3 T& R4 V( C* q0 b7 X+ A24
, p! m9 ~$ m; C! U9 c7 }5 s5 h' Y25: m$ h1 L/ C; e; h/ t/ g
26
/ x- Q' s* @2 P* r2 U, j' S2 G27; R- n* X4 ?1 u: e6 x
284 w, F. a  y( w3 O4 h2 z! i
299 l* g( z  W. o5 M, P8 ~5 _3 u
30
; M% P9 S4 m6 v4 Y: L$ E31. h, ^* \$ }$ O
32
. e9 F3 _  }9 [0 l33
- z! o' G% L# E& ^* e5 v" J6 a9 {. `340 a# X9 V! q! g
35( m3 j, n0 _1 B' q$ b2 g
363 K% A' d" J, r0 [  \' X
37
( i# O  p( h  @- e  A$ S6 ?3 @386 j: g0 [/ m7 w! Z/ f, k* [2 f: u
39
" w- ^9 v- {( Z404 B2 m9 I" o$ k
41) j/ o$ T0 I8 X1 f7 d  n' D2 {
42
$ f' J+ I# b" P1 Z# ~' J" M43
$ E! Q7 i- D- A. R# a9 Q5 R44; {# |, C- F) I
45
! Y+ `' {4 `1 E0 l" r46
# G: A- B% @) {7 m" o$ Q: I7 [  q47
+ N7 w& Y( D) @' c2 D) Y48
. _1 d0 p1 o; G; {, t5 {0 }0 S) A49" x7 d2 ^# m+ a8 z, t& r) \7 o
50. t/ \8 e' `, T
51
+ B) o; |5 K, B9 t0 A7 `- o, s521 K' p! c6 |4 r
53& x( N3 }8 G3 M% [
54. k. q$ o& n0 S; Y* {
55$ b2 ?# h/ s& O5 b
56
, O/ M" v, V: s0 d9 v' ~57. I9 \; j' G" C1 ]0 d9 f, F
58
* C1 t: ^3 R; i$ n59
# n6 t. _: ?3 f  v; ]602 E6 i) w5 b- W# z5 h
61
8 h4 _6 M+ c) I* w& d+ d- n62
% D- {6 R2 @4 R- ~9 h63" `7 ~9 c' ^/ W: u0 k
64
+ i, y; X& j6 a! A; q2 f2 O65
% q; u: |  ?- [8 R66
9 y" \$ g& c9 e( M! N$ ~- A2 c! K67- q% O9 y( ~$ h" L
68
& C6 N8 V+ s$ K: t) B4 M* p69- i3 U$ M/ q  B; N% I1 A
70' O5 s1 [  v8 {
71
8 M9 J' V% H( n# }, c725 }4 d: G$ ^6 q1 d1 q
73
4 e& v! o7 ?( i0 h! h/ E: B( g74
# P6 |$ O; s, D5 z& g75
/ ]0 j7 L$ ?4 Q9 Y6 ?76
+ e* c8 r- Q, p$ f77
# X8 j1 V& m/ l78
; o/ {- Z4 O9 A: J79  |8 M$ J: ^' ?" `* Y- S
80
$ k, U* G3 a: s- q81- l  z+ G0 m: x3 ]
82
' ]* ]$ B* G. N83
- J6 l  @: B: y840 v0 c) l( A$ f& \! e# W
85: z4 d% ^! G) K% s# ~- r( r
86
! |2 T' t4 \5 J1 J87
& N9 `: Z* o$ s  r& h0 ?88
# R7 a- ^- V: [" M: `" Q# d" n89
) N, s# E7 Y, |' R# N0 }" `90
- {8 R( E9 h% ]4 I91: W7 {- d9 p; b8 @' g8 o, V$ D$ {
92
0 i, E1 [  s9 E' @934 d/ _3 x! c1 }9 _9 R8 d
94+ B9 x  g5 m2 \+ ~* M7 d, O
95% y" K6 E8 x# l0 }- g; g
96
% z8 H7 k: J+ T2 O" M  h6 @97; U+ b: P2 C0 z0 N' X% ]
987 b  ]- C3 M# p: [
99
) i  j- P* @9 g% R4 E4 E( K2 W2 E100
* b: X) i* h  ^, D1018 M6 j% v( {" ~# C# K2 c
102
& g$ n5 A  q$ y/ _103
! @& V2 x4 Z5 u# z' @" w104* i1 j9 U& G; l. M5 I
105# F% @% d* M3 n* @& S
106
% E" p- c6 @/ B8 p# U1 b107, U3 C# \# ?/ H& r) `" h8 Z! |
108+ h; w# D+ F8 [5 F  E& l$ }/ \/ ^) {
1099 b, Z- |$ S5 Q$ k
1108 x/ T" `. m  ~& R4 {
1119 K4 d+ t6 `6 F- j1 a- w3 U
config setup
- n, @& `$ J0 `) V" i1 P
( [- p' M' L" [% U    #是否缓存证书吊销列表; |! T* O7 p* x  K
    #<em>cachecrls = yes</em>  q, H3 _% [7 i; e; d1 h& F

( R+ C  J- [* M/ {1 Y0 L    #是否严格执行证书吊销规则6 w0 C2 B( @: L3 I. u# u
    # strictcrlpolicy=yes
" a8 ^) k2 @# V4 z& R  I7 y  ` - o, F* h. ?( W$ H7 \0 N+ X1 U) |
    #如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.2 h0 D+ b8 d: h. |
    uniqueids=no( V1 T9 w/ y+ Y- z1 {) K
) Y! d* @( H1 A! ^1 y' h4 {& g

8 H# w  z& s+ m6 X6 R, n  h8 g8 g2 N#配置根证书, 如果不使用证书吊销列表, 可以不用这段. 命名为 %default 所有配置节都会继承它2 O) u7 Y% h; u$ T
#ca %default& ?5 K- |# p4 ^8 J3 p7 \

! ^: q4 e/ P+ I9 W    #证书吊销列表url,可以是 LDAP, http, 或文件路径
" U- c; c- c2 j% @/ }    #crluri = <uri>6 B* x" T- M2 U8 f9 Q/ N% ]

+ t: ~; F8 ?4 w& a  P: N
. L0 I6 T& o3 N- b; ^( V#定义连接项, 命名为 %default 所有连接都会继承它2 H; ~* j- i. Z( n3 `
conn %default
! G; A* b  a1 e3 V, M% a" S & b$ p- t' `" a+ z8 x7 @
    #是否启用压缩, yes 表示如果支持压缩会启用.' m1 C8 E! ]# ]7 z
    compress = yes
- Z  j( b2 v/ }% U: r" H% \
; X9 [1 h! w; C  l    #当意外断开后尝试的操作, hold, 保持并重连直到超时.
8 b; }- c. ^- N    dpdaction = hold
6 Y0 k5 E+ Y0 _& W4 U
$ [* z) G. z; |* \" o    #意外断开后尝试重连时长
+ h7 b1 V" ^* v; ~0 O6 ]$ P    dpddelay = 30s0 G& G+ L& N+ o0 t3 }# R+ ~
" N" B4 \- X: x9 G4 o
    #意外断开后超时时长, 只对 IKEv1 起作用
4 O+ @" q/ B$ @% W    dpdtimeout = 60s
6 G5 Y+ c; F: _ % U" Z0 C/ Q0 h
    #闲置时长,超过后断开连接.
" L, ]# C' H5 E- E8 W. B8 `    inactivity = 300s( W9 ?$ H; r, w: b; J

. ?- N+ g4 H. N6 E* r8 X+ T0 O1 n    #数据传输协议加密算法列表5 _+ l" ]8 `7 s9 e& }; v; n
    esp = aes256-sha256,aes256-sha1,3des-sha1!
0 `" _( n  w* X: F
2 l; p3 ]- F* @; u8 V! S    #密钥交换协议加密算法列表
7 Z; r* {$ `. Y    ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!+ U3 u+ ]5 d2 E
( d8 n1 v4 A) a2 O+ \9 @9 }3 s
    #默认的密钥交换算法, ike 为自动, 优先使用 IKEv2
' [1 L# j' {, ^    keyexchange = ike! k2 N4 \: h7 I! e5 R; B7 N

, t. h  s" Q" L' G    #服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.
+ R4 C% R% A+ I) h" A! f/ s    left = %any
! }+ @* V; V/ o4 \# M3 \    #客户端ip, 同上( W4 Y/ g/ F# B# Q1 h
    right = %any6 b; r/ I  r' \* {
6 F3 f& k8 B2 [  X; [+ h
    #指定服务端与客户端的dns, 多个用","分隔# A- {% t, ]) a! h; T
    leftdns = 8.8.8.8,8.8.4.4% N- J. v! p" O+ J+ |+ q0 d
    rightdns = 8.8.8.8,8.8.4.4: t% M' R7 }7 j$ M; j
0 _* r" N% s7 g* _' Z9 \
    #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500# H7 r/ V. ~9 @2 m! |0 ^% S
    #leftikeport = <port>
, C/ H# s! A" _7 Y1 n8 [9 j( Y4 E- V
; ~  S) w+ i3 T    #服务器端虚拟ip地址
$ p2 m3 `- m( v" H) F" @# l9 L& p    #leftsourceip = %config
/ f' g8 D- Y7 C    #客户端虚拟ip段( Z+ i% g! h$ s
    rightsourceip = 10.0.0.0/24' V* N& b3 j8 e  g0 f' O
  X. t  h& k! l( G
    #服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字6 A; V& f  K6 R' b+ U, n9 ^1 [
    leftsubnet = 0.0.0.0/07 N' W; J% K# \2 y' W
    #rightsubnet = <ip subnet>[[<proto/port>]][,...]
. Q; d" t( w( m; N5 t: o$ m / S& H5 s1 `" O5 o. N3 J' ~
conn IKEv2-BASE
4 L' k7 z$ K9 u( p7 i7 h6 q; i ) Z! ^+ k# c* W0 M: m
    #服务器端根证书DN名称
1 o( ]$ U2 @3 `( ?! u$ p    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"
* A5 {+ C8 H2 D6 G: l$ E( V& j5 x2 N 3 K- b, M5 R# V4 n
    #服务器证书, 可以是 PEM 或 DER 格式) `/ L( T4 L) I
    leftcert = server.cert.pem
) U/ p' [/ F6 D    #不指定客户端证书路径1 A8 l9 ]! }, _3 x, b# R
    #rightcert = <path>" r0 `0 j0 m  [" P: K- ~1 F
9 h; ~( i1 P3 m$ f
   #指定服务器证书的公钥
4 }  v/ Q7 Y. c. l* q    leftsigkey = server.pub.pem
; _% ?. J! q2 X. y, `! p    #rightsigkey = <raw public key> | <path to public key>9 C! k1 \) Z) L' o7 j" ^& D

9 n3 I& f& g. F# c7 c    #是否发送服务器证书到客户端/ P9 y- s% N: x! C$ L
    leftsendcert = always% d' i) }& M) ~9 {6 r/ @3 e- A$ K
    #客户端不发送证书
' s, F( }+ y1 C/ r1 ]    rightsendcert = never
- D' S0 s8 j* i
9 Y/ [7 N; J  v3 V+ l; ]    #服务端认证方法,使用证书+ A4 t' @4 U3 I! X- J& y( W
    leftauth = pubkey( b4 p. V1 W' S
    #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用! Z. L9 ^+ l& N6 Q9 z  }0 ?" ~
    rightauth = eap-mschapv29 p' x3 W. s2 A& G. z
3 Q; e5 {' x# e7 w, Q$ n
    #服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行.0 i3 G* Z+ A& ]+ e
    leftid = vpn.itnmg.net
8 s. Z; s8 y* ]" v" q/ |! Z2 K& j    #客户端id, 任意( Z0 K& D; F  ^& O( H7 M' H7 H! c
    rightid = %any5 ?* R5 E6 ?6 ]4 {

. K$ X( I! D2 M( k- k1 ~) W#ios, mac os, win7+, linux; T, u& d* r1 D( a! A) E. S
conn IKEv2-EAP
5 K% s, C; K  R- Y    also=IKEv2-BASE
$ ?0 S, q" X( q1 n7 F, u 5 j6 Z6 }3 S- B
    #指定客户端eap id* ?( L! G2 W6 w" i
    eap_identity = %any
+ h# l6 j* s7 Z) l
& w: Y3 o# w8 J! v; \    #不自动重置密钥3 Z) m" E' \1 z  h1 ~# i
    rekey = no1 W+ o* L# x. J$ L& h5 F

) N, W5 _: I; C# {3 b    #开启IKE 消息分片
: B. j: z  {) p& M    fragmentation = yes+ |$ v9 M* h+ F, a

  `' D8 c3 X# w( w7 |9 U    #当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.# J, h( e4 z3 U1 x7 m! _
    auto = add' A9 q+ h0 Q. a, N4 P0 D+ u; J
我的设置项$ W4 ?# V" @% N* K1 Y9 W: ]$ m: p
6 b* V% B% C3 p+ |
1
0 d2 d4 a- |+ t- d3 e( S24 d. A6 J2 h  ~3 j! N% ^
3
/ ~2 ]: }8 d1 f, Y4
# y) B4 O* [6 w5
: d8 K6 ]. l& l8 K6
! \) }, A. G( i) E/ ]. H- W7
3 ?- D' i0 o; l. c" ?8/ z7 U# w$ M$ \$ k
91 I3 h3 X; L8 w
10
4 ]" K& w" u) l/ D7 \11
. |' o  l, d' s  K/ O  A12
8 v4 ]1 A2 a5 b2 v! A& V. n% `130 c5 ]2 O; f$ k  U
14
1 N  }; y6 a9 p' b6 f! v8 Q15
: V7 a' E. l0 F/ n$ A9 Q16
4 Q5 A) P1 a. m# ?% p( G17
3 h4 d3 @7 o) |" Q183 N9 y0 B, z) }
19
+ G1 `: u% [, M; H20+ d# ]1 T" u; _5 r. F
21
6 ^. Y" [- v# Z" j22
+ w. B, c( z8 H6 ~1 r8 Y230 P. j- q. h1 g! N
24
/ v8 B/ P/ {* H9 F251 {! h# n/ K* j, E( n: j9 }, g# k
265 U' n( t! I$ S& f; O5 }
27
0 _: |4 x  F* m1 \: |- D+ J28
. d: P7 c9 K/ H/ n+ F7 Y/ A; F29) I% H6 ^& P4 x+ x; e& X) _
config setup  d$ b6 }; g! i! s' y: t0 B
    uniqueids=no! `4 N0 v& N4 g) r9 |3 G$ X
% R$ E4 [+ J; {4 `/ o
conn %default* F/ I. }5 ?: p' D6 ]/ e( w2 A) n
    compress = yes
# g6 d4 V; I+ D# a; h! o/ U$ S( J    esp = aes256-sha256,aes256-sha1,3des-sha1!! U% p/ Z: O0 P8 i: R7 i% d
    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!( ?3 W4 N+ `6 t) d8 {
    keyexchange = ike2 X+ Q- ?# b6 O
    keyingtries = 14 x2 s" ]' \. [# x5 S, ], {
    leftdns = 8.8.8.8,8.8.4.4
- X+ V; I& T" b. @/ D    rightdns = 8.8.8.8,8.8.4.4
" o" [6 l+ C7 g$ \: G$ E
1 V2 r. B, s3 t+ M% ^# Xconn ikev2-eap
7 ?& B+ \  k6 e: o  e( b8 L6 W    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"
* A: L  M. @, w% q" l; T3 Y    leftcert = server.cert.pem/ j) \0 j: y1 Y5 R+ q; j
    leftsendcert = always
0 C; ?, m) e; f) T# M/ m# x" n7 n, m    rightsendcert = never1 _# C# i6 R3 S& p5 {) a
    leftid = @vpn.itnmg.net: Y& k- u8 Y, A9 B& k) n) P
    left = %any9 j$ c! ~; R* a6 E5 j, j, D8 F
    right = %any. f( P- r$ `- Z& ?  d5 D
    leftauth = pubkey4 X6 c. V- o1 [3 J
    rightauth = eap-mschapv2; Q1 |7 k- N0 }, B# z
    leftfirewall = yes+ B" U: O: w, s2 t- W4 a# R: i
    leftsubnet = 0.0.0.0/0
* H! ^2 n9 G1 c# ^/ x. o    rightsourceip = 10.1.0.0/16
. p) R9 B4 K' a& K3 b    fragmentation = yes3 I. T2 B( ~. v+ W- D5 M
    rekey = no) y: A& i8 `8 o
    eap_identity=%any" [8 x/ P' M- W  d; w& F
    auto = add
# s* h: f3 Q7 p) B; Y; R8 C   z4 T3 M( G* A* p
5 \$ f. _, [8 f5 K3 {
修改 dns 配置. T. a6 T: ~3 ~9 S

9 E$ ?8 s& r9 ?7 `$ e* cv5.1.2 之后, 所有插件配置都分散在 /etc/strongswan/strongswan.d/ 目录中.' P0 I1 B/ R8 d
# R' f- l7 o4 Q8 x% F. [$ R
1/ I. z; P* B3 y
nano /etc/strongswan/strongswan.d/charon.conf7 O- p% Y1 S* L5 t( [
修改如下% h0 H  q* V7 Q6 O

5 j* g4 G) F9 v1
7 ?: {" _5 S: ]27 H9 v, T* ]: M4 c" k9 W' Y9 h; _
34 K: ^/ b# _& r
4
5 ]$ D, [( ^7 c1 V% u5 G5
5 g0 E: i* x( o' D$ a3 E& R61 Z1 e/ h/ K( L$ n% p* ~7 D( i; {# u3 s: \
72 q( ~% k0 I+ d( e
8; T: T) I. P# x9 Y( @
9
$ {  V' w/ a5 _8 v7 h) X( |101 i; U- k8 I5 m1 k! y9 X1 |
11
+ I! K5 x6 t% q3 w) \' q  v121 n8 s) B( {- L/ p4 E  }
13: I) N9 N, t# `: A
14
( i" H/ s/ ?) U15
; A( k6 \3 G# Y- |% e  U2 }16
7 F& c" j- F& S5 H) ]" i# a173 Z) }% }1 v4 x1 a, a
18
  {9 y) R5 V! [6 K: Q8 H193 G! R' D/ W0 P% {4 W7 H7 ~
20# _2 d+ X3 v# T& H
213 J6 }. J% k& M9 D1 o
22
  h8 n! @! n' ~8 W, g, Z23
6 j- [" r+ o7 w  d, n. bcharon {" f; h1 m! n% x4 K6 C$ S* I1 d4 f
    duplicheck.enable = no #同时连接多个设备,把冗余检查关闭.
: ~1 R. w6 _; p
! ^5 D7 X4 t6 @( D    # windows 公用 dns
  V) L1 T: ?" ?: x) G6 @    dns1 = 8.8.8.8# R3 f4 ?( A3 u1 t# u
    dns2 = 8.8.4.40 d1 h$ Y! H' O2 C, N1 ]; p( g7 r

$ N2 }/ N2 U; L" f/ J' \    #以下是日志输出, 生产环境请关闭.
( Z6 D3 @7 `* m" C( Y! i    filelog {
& n: h9 Q0 @- W5 d1 M        /var/log/charon.log {+ P0 U, l9 C' D9 u
            # add a timestamp prefix
9 [) O- h% ]# R! M5 C5 K            time_format = %b %e %T
% j9 R( D1 `# e! h6 j            # prepend connection name, simplifies grepping
, V0 D* M$ U2 R6 L$ E6 I( i4 D+ i            ike_name = yes
. l  U: J; P" W1 [            # overwrite existing files7 T. s' X) b' e2 b- W8 v3 o
            append = no; b  j; ~0 \- {* P1 n
            # increase default loglevel for all daemon subsystems- @1 M9 W; P* j/ N
            default = 1
5 w3 L; u* ?5 T( Y5 s, Z. f; n3 Z            # flush each line to disk
& A+ \0 v* G7 u0 w1 z0 e& b% ?& a            flush_line = yes
9 T+ K7 K8 A9 V6 }/ S- P        }
5 [4 @; Z! {8 y3 Q4 z) o    }  Y& V- h! N, s: B4 }6 u, i
}' _5 l: A6 w) ~6 A
配置验证方式的用户名与密码
. `2 D8 w& j8 Z5 b& ^. q4 s/ x  Y  y& n; U- @8 `
1
  i8 B! q2 ]8 P, i' m3 a" knano /etc/strongswan/ipsec.secrets
, g. l; E6 M9 c7 Z8 }下面添加用户+ b/ Q" w! h5 L& p* L: A

& ]! w0 I1 z' [5 S/ S( j1 O2 t: S12 P) r4 `' n# b& w0 o' L
2) m6 ^3 p9 L, g( f8 k0 p$ l. Z
3
2 w0 y/ i! A$ n+ C0 S; I  C1 _4  e/ t! p5 k# S$ c* ^8 K
5
9 k! m1 m) L. K1 l3 ^+ J64 w5 g* S& D7 v. I. q% b2 c0 m
77 O, d' Q6 G% D6 Z; O' o$ a
8" A- S/ I; L: L; ~
9
/ J! M1 I3 H% s; ?. [, v10; n8 R/ A' f6 J7 r5 b6 J6 X5 _/ S
11
8 }3 X" D2 b7 d7 R. z' C12
8 v. `6 R5 p/ D( t  n0 \13
/ h9 W1 E0 M+ j( t14. w, Z7 @  o; h. j
#使用证书验证时的服务器端私钥4 H  T+ o2 b' @2 d- y# f  Q
#格式 : RSA <private key file> [ <passphrase> | %prompt ]# X' U7 U3 R6 [9 K
: RSA server.key.pem) `2 w3 F7 W. v: I
+ M, j  ?1 A0 H. {
#使用预设加密密钥, 越长越好
, j* A% I$ J' Y) n- ]+ |#格式 [ <id selectors> ] : PSK <secret>
& B. M1 w( O5 r1 i( b' s: c%any : PSK "预设加密密钥"
2 |8 [9 z+ O* O% i& M 0 t9 Y" R! d- [- U8 \0 ]3 Z
#EAP 方式, 格式同 psk 相同2 D6 e; S- G. _) q4 f0 e
用户名 : EAP "密码": V$ Q9 R, k) y3 w. Y
, _: L6 q( S, s2 d) T* s
#XAUTH 方式, 只适用于 IKEv1. J8 I9 E- e. t7 r; u  E  E1 ~
#格式 [ <servername> ] <username> : XAUTH "<password>"4 e' w+ @0 [% Z) c  p- l! }* k& \" c
用户名 : XAUTH "密码"
, x( f/ k( Q4 H; [( Y# a, Z( a1 {开启内核转发7 f+ r, N6 T& O

9 ^7 T# Y# E! F5 I11 N" p7 b: z4 x9 @( x
nano /etc/sysctl.conf" w% o- D5 S* D9 h0 q" Y* D
写入以下配置  ~+ T' S( m! N/ X; o( u" P
1 h+ Z' s2 `* S0 ?$ U8 j
1
1 y/ ^7 n( _7 R6 Q2! s( i. j3 }4 D5 l9 L
3
/ R( I" {2 R' O% Z# VPN
. t4 }( ]* {2 D0 ^  wnet.ipv4.ip_forward = 17 @) C" H: j3 D9 z- _( ~0 g
net.ipv6.conf.all.forwarding=18 x4 f  k6 Q/ f: O$ ^1 m
保存退出, 执行下面命令.
( v, M( I1 l: m2 j- L2 x, ?/ ]6 ~# B; w$ C0 K, _6 U
1! E0 d3 r. q0 O: e' ^  U3 {7 K7 C1 Y
sysctl -p
  H* q+ V$ M6 l4 U
  y3 W0 ^6 H, e' o  m: @- B* ~1 z7 \# h
配置防火墙1 y% T$ M1 y- q

% T1 t& o7 u5 z% Piptables 配置方法4 f  m: o1 @/ x8 f, o
7 s% K5 V  B# d( Q3 i8 e4 o& y& f, Q
将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.
5 X/ q( Z/ z/ e/ I: ]0 b
0 D0 Y, o6 B% V1
7 W  R6 ?7 Y  \# P9 @) J0 O2
, ?- w7 h/ }4 A3 O, H2 Z3$ o* ^  _8 a+ S* k0 T/ i- F
4
) [# `% I9 v/ m( k. V# x5$ Q$ e( h! _' g7 Y
6
* @$ \( i5 x# B0 t+ L7" u5 K3 M. P& y
8
2 X: O5 p2 a! n, L91 C- Y" f; F; z, J  x+ K' C
10
% [/ [0 H) S1 `! C8 v11
) e) ^. v4 O+ u6 J4 \# L4 U121 q+ [4 w+ n: B, ?! `: u
13! T5 E! ]" F6 z. v0 D6 Q5 I
14
) E# n6 v  _! v2 S$ U15
% o0 s( }& \7 ]160 R' G' f3 d% ^/ w' K: h9 g
#开放端口
, a- d( t: E& ?: w5 r$ V+ Wiptables -A INPUT -p udp --dport 500 -j ACCEPT0 W. S! N0 o! h1 ^+ _# \3 b3 W
iptables -A INPUT -p udp --dport 4500 -j ACCEPT/ A. l) o6 A" [& N

2 r# A3 L5 O/ ~( ~8 c3 J0 X8 U8 w/ m#启用ip伪装* e8 n8 r9 A6 j" C$ C
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT1 A& B1 Q( q3 _% D" Z
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE# ]& q& H; ]7 h& N4 W7 X
3 {7 w8 m% i4 [. r& `* G0 n# V# p
#添加转发
; Y8 [, [; h8 C( L3 L6 liptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT
! m8 ]2 E* y, p6 D) v$ y/ o
$ i( l6 h4 w$ `% I* l#保存规则
9 V3 t- W7 P0 q, A& d% kservice iptables save
- C8 W. Y' e- \2 o , Y' @" e/ }: @
#重启服务; U1 @$ P! r) R; ]
systemctl restart iptables9 t# `( ^9 D9 `% T
如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.
8 C4 ]2 x4 a7 t" z( r
1 z" o, O4 m/ d: Z7 I) b  y1
# P$ j" _) J* l" n$ j! \nano /etc/sysconfig/iptables
: v/ K7 X6 H% H; X: C- |将下面的规则部分贴进去, 不要整个复制粘贴,  根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.
3 Q% q% s) G* h( V' }; _) [# {7 L7 f7 B7 V+ [7 T# s0 Q5 U' F
1& Y; g9 T/ B% i( J% c
2
4 z* @* P7 L% F& F. I$ D2 o" U5 _3
. h1 ^2 `% s( y, B, F4, S% b7 N% W  m8 H- k' s9 h0 F2 y
5- {  Q- n# t/ n1 I
6: l% E; [; \4 E, `3 q
7! h1 C# _/ t3 L2 u# U
89 }' X5 A" B7 E1 W% _
9
& q2 ?7 T! \- v" ^5 O  t/ V10. g. {6 j, f5 T4 x$ t
116 r1 u! A3 N" ~! k) C
12
+ _4 o5 [( P* G$ d6 I* b6 a13
; O0 Y1 R1 l/ x/ o+ L( B4 c1 Z6 q14
! Z9 a( W; U8 |9 t- ~# F7 D15
# ~9 n6 O. d% m16
  n: V' H( M2 y1 ~5 a/ c3 n17. N# c8 W6 ^/ ?6 e3 m2 O3 H! {
18) X$ [8 o' N* H3 D0 m; d( Z
19
  D& o$ {7 ]7 T; T2 S20+ [. Y1 T3 D1 p8 {
21
5 B9 P6 \" Z. D; q+ ~2 p22
. o6 W' `8 U, H5 A" h9 @! G*nat
% i0 R+ K- S* L3 o6 C:PREROUTING ACCEPT [0:0]9 }, g! V1 w+ W& s+ s; n
:INPUT ACCEPT [0:0]
( I5 E$ r" s9 d:OUTPUT ACCEPT [0:0]# b, P7 N, p9 F" |8 u
:POSTROUTING ACCEPT [0:0]# G$ l" d5 ^. R5 }+ L5 `5 V; G
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
( E* w) R3 y7 D5 @/ C8 |) L7 N& I-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
, N2 T) j, k. j/ \" XCOMMIT
* G0 P2 z% I' x# f$ V# I! a, @+ P8 Q*filter
0 V0 w$ b5 w( @; F9 T. P) ?  n:INPUT DROP [0:0]: k7 Q* k! i+ l2 ~6 G9 C) q
:FORWARD DROP [0:0]
  A2 l  c% u. ?+ A# }; u$ c:OUTPUT ACCEPT [0:0]% L! f1 M. }, k
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT5 ^9 C$ }) _+ T* m0 ~
-A INPUT -p icmp -j ACCEPT& \/ [0 @8 j' u
-A INPUT -i lo -j ACCEPT, g4 H  }, t5 P. v7 V3 A
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT/ d( d+ M" y& N0 E% u
-A INPUT -p udp -m udp --dport 500 -j ACCEPT- J9 `: ~4 J# y
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT7 q" S" j6 `% |. C
-A INPUT -j REJECT --reject-with icmp-host-prohibited: M. l( {! W4 X8 E, o
-A FORWARD -s 10.1.0.0/16 -j ACCEPT" A5 J3 L* E- n! i, E; B
-A FORWARD -j REJECT --reject-with icmp-host-prohibited2 K* O4 q  E5 i& M4 R
COMMIT. K1 ^/ P/ p2 Y$ H# M* Z% G4 X7 \3 K% U
保存退出, 重启 iptables 使之生效.2 z) \" K* A# ?. ?9 U. F# X2 F
1 \- E, G) {1 p% L
1
& A# }* Y0 z, @: N! \6 }5 S( j1 xsystemctl restart iptables
/ r# a+ h4 Q; Z$ Y6 C$ U$ J
4 v- O8 G( @0 ~1 x/ p
, E0 q7 [! Z# V以下是 firewallD 的配置方法, 使用 iptables 的可以忽略.
+ ~* Z& D# H4 i( ^' N4 Q7 t
) e8 ~) k( u+ ~* _4 l$ k  ufirewalld 介绍请看 <<CentOS 7 firewalld 动态防火墙介绍>>* F" g; G. e+ w+ I% d
! a8 _% m3 w& g. C# U- c; L3 T
首先将公网网卡添加到当前区域中
, q+ H8 I9 b7 [% M( V# O
5 l! S5 [0 p+ a9 z1 }1
! M, H+ y$ ]% k/ u" B; G* M2
' _3 R) o% ?8 p) x! J& ]#查看所有网卡信息, 找出公网网卡
5 a' K/ k( {, J; u8 S1 A% Vip addr1 @% Y7 g' z6 _8 l- c5 t
编辑网卡配置
& `8 {/ h. V1 T4 j1 k4 ~) _
% Y4 Z: A' F! m& o, B% c* y& s7 u1
7 U' n' N) B" F8 tnano /etc/sysconfig/network-scripts/ifcfg-eth0
7 Y7 F/ x2 w( T8 }8 k+ |, n7 O1 E/ H在最末尾加上区域配置
! i# b7 B+ O5 a$ g0 G* M
8 c% r1 i/ w! F+ U0 C1
) ^% i+ p0 t/ m* Q/ C4 F! {) y+ l, HZONE=public" P# D! D7 u$ |4 C2 F5 j
保存退出,重启服务1 Q  P8 Q3 O1 S- g: p. e; X

  }; p4 i; u" S. E  W  M" D/ K10 I$ o8 F% C7 C# f+ y9 d- f; A
21 v) N& F# k( L  p2 e$ @) Q
systemctl restart network
0 W* N0 J0 m0 t+ ~/ l' Jsystemctl restart firewalld5 F5 b5 \3 B; l. T

: ~- C5 f$ _$ [0 K: h. V0 E5 P" V! j7 |4 e+ I! m5 Z# U. Z% L$ E
然后新建一个服务
/ W  ]% t  N* |, I3 ]" j) J' b# l2 j. I# g
15 A  e6 b- }% p- i( d
nano /etc/firewalld/services/strongswan.xml( M, g2 F! F  ^+ d" e. v% ]# D
填入以下内容& J' A; M2 ?; x1 ~9 n1 f

+ ~4 P% ], `' v: w1
2 [# C  I  M8 }& t2* J$ ~, E& @+ `4 b$ r# B5 N
3
! B$ B! T4 h+ C' n- H. i4+ X7 |$ f$ w, H) n- P) m
5
# J% }/ c0 M7 N( S' N0 ^- x6
3 h7 O/ L+ Y  F. K$ @2 _* S<?xml version="1.0" encoding="utf-8"?>
. B7 C: a+ c) j4 ^" {<service>$ n# j6 y0 F5 H! w/ y, g
  <short>Strongswan</short>  W. _3 D1 L- U& S  C6 l$ P5 ~
  <description>Strongswan VPN</description>
! \+ b4 C3 I" U8 U6 R9 B' r) r' {  <port protocol="udp" port="500,4500"/>0 U+ {6 ?: L2 i) y
</service>
8 s( s  H" K1 B4 J3 o6 w; h! V保存退出/ n# S# V. i* L$ \$ r) n2 i

3 T" e7 z4 K$ B1 K: y% ~. E4 F添加服务到当前区域, 开启转发
, l9 P1 ?% y: g5 N" ]1 F0 D* j% Q% x* w3 U5 G) x5 E; x  y
1+ Q  b' c  S) A1 |- u4 X
27 G$ Z" X7 e3 |: a% V, Z
3
. {) ?: m. Q0 a0 X  B0 ^" n46 p6 ^4 r3 A2 K
5- V! S; }" Q( h
6
: o) h+ R0 T8 w" p* |2 e7
9 w, L# B) [# |6 s8: [+ g0 P8 q5 c  l  n: |& R
9
% n# h- i6 K: U& n$ w) G- `( Q10
( J/ G6 [" I9 u1 c- Q) b' m, H11- u. B, l4 L  Y8 t
12: Z7 T  n  u2 M6 I  R. U
132 G# G: l! o) Z
14
  i4 T" ]6 t% t! a; p#以下命令没有指定 --zone 参数, 都是针对默认区域 public
; \3 T) }4 W4 z; s#为区域添加服务' ]6 U0 E: i: s3 K: n8 G: v% W
firewall-cmd --permanen --add-service=strongswan- C  A& j! l  s
1 Y/ P: T/ d& ]% Z3 m/ i# v2 U! f
9 T; L5 g* o2 ^5 i
#启用ip伪装6 U) M2 y5 I' t* v6 v
firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" masquerade'
; }+ N( c4 |- E( p% n) g  U0 _ 5 n6 B0 H! v6 }+ Q
#添加 nat 转发9 A7 d, K3 G$ I& J. l" M$ w( r5 ~
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"'
$ B* }; s# H" bfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="500" protocol="udp" to-port="500"'- F  [' f& P6 u8 Q, T
, l5 L6 y# g; i7 I8 L
#重新加载防火墙配置; ?! k; @+ C, x! n& [
firewall-cmd --reload5 t" |  u/ ~8 I, c  b% R* f, C; S
1 o2 R: _; C1 T% ?; ~! b

8 f- W. ^: o6 u( N! {, N5 G  B除了用 firewall-cmd 命令外, 还可以换种方法添加上面的规则.
, ]# k8 m2 ^% G5 o" j9 s! P( r& v; T; N: z9 b# P7 S, x
1+ t1 z3 R9 \. k
2
, @: K9 \: d5 a#编辑当前区域的xml配置文件4 ~1 C4 o% l2 B
nano /etc/firewalld/zones/public.xml, w# U+ E0 K8 s
改成如下内容, 我这里只开放了 ssh 和 vpn 端口, 其他内容根据各自的情况修改.; {' q. |! K1 a5 H; x: \$ c7 h7 y

* F! Q& E& |8 q+ Q: e( J1/ t6 |+ `6 Z6 z+ \, [
2: p: B% @7 {8 |, C8 t
3
( _5 s2 [7 @3 }( K6 y* e4
$ V5 O2 J/ j4 w& F5 u5! `$ F6 G/ E! H: M$ E' n5 j# A
6
4 x/ ?4 v, |6 B2 c7
  H! U) {: l: d" W+ c8' W# s- }4 C6 }7 y0 E1 x3 v
9" `$ F  l. o1 L6 P
10
' V5 q* p5 i3 K2 N11$ a. u' K; V0 R. C7 a& y
12/ i$ L2 f$ k8 }1 H6 Q" i
13% A7 M1 u4 W; y
146 p: P* F* S5 r! T4 P% W
15
. ^4 v# E' h4 ?& r, B4 h160 s, I5 C6 S' m1 L- x
171 X  \! I; e1 M( o7 V1 \
18: {" K" l7 `# o9 \
19, D2 F! v7 t4 J3 X- t/ p6 v
<?xml version="1.0" encoding="utf-8"?>
1 u8 x' H1 V! k  {: V<zone>4 P. v$ |6 _! }( k0 z* W
  <short>Public</short>
) f; @1 ?( j8 m6 o- T5 i  <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>
- j1 R& B9 j3 p  <service name="strongswan"/>
  R2 x  G& y2 A  <service name="ssh"/>
# y" ^7 x) w6 ~0 `* H5 r/ D3 m  <rule family="ipv4">& X: V% y2 f9 V
    <source address="10.1.0.0/16"/>
& K# K% }+ R; Y* g    <forward-port to-port="4500" protocol="udp" port="4500"/>
' L  l! t2 c* n; k" u  </rule>: H/ |8 N* I3 V# l4 T2 X
  <rule family="ipv4">; B' j5 z0 z0 S* ~8 p
    <source address="10.1.0.0/16"/>" I- @0 N  @6 o) W8 O: b
    <forward-port to-port="500" protocol="udp" port="500"/>
9 v0 g0 Z6 k8 X2 q4 d  </rule>9 ?0 x. s2 \& O/ _
  <rule family="ipv4">
6 q1 e) ~1 _0 e    <source address="10.1.0.0/16"/>
! _3 o, P0 ?; Z, c( H    <masquerade/>. a# Z$ h7 F. u/ W2 ?
  </rule>
1 W9 g8 C. i2 C7 X0 _2 q( f& X: `: [</zone>
) z; S: s2 j! y% N8 ~! o% r1
8 i0 B8 j* v; W2
; Q( O: \9 ]# I) C& c  y6 X#重新加载防火墙配置( @* J! S! ^" k0 E  p
firewall-cmd --reload% {# f+ J) _, ?1 Z& b; Z
7 R5 a; E/ |, H

2 B9 }' D6 W6 q1 ?7 ~2 r配置完防火墙后重启 strongswan 服务
4 O' H: X: t7 A8 H, r  n" h5 ]* k2 X0 |" Z0 S. j
1/ J9 ]! z0 \# }# ^9 t
23 y% [6 x" F, E3 I$ }
strongswan stop #使用strongswan 自身的命令停止服务
- y: v- |: h* |. b7 _% b* z1 _systemctl start strongswan #使用 systemctl 命令启动服务
& m. @+ N9 W3 R. n+ ^% g1 D( I& Q这里不使用 strongswan restart 命令的原因是, 使用这条命令后, 再用 systemctl status strongswan 命令得不到正确的运行状态.
* e& Z) p& p/ p+ {# |. Q6 g3 T: e( u2 v# F: C/ K& S
至此, 服务端配置已完成.1 N# M' |. {4 g6 y; J" t
9 U- r% F" [+ b# ^0 D

; h5 u7 x: ^6 c0 S, m. h. i# }/ I1 j% _9 g
为了学用 firewalld , 特意用了两天时间研究, 学会了才发现, firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.
. _  T9 M3 k9 ~) K/ N& s) W2 T3 D$ e0 [4 c3 S' d+ e
客户端配置
6 P& O) U) e, K9 Z4 D5 H* I# r5 V. z/ n
IOS:0 B( D  [( K* ]% w$ I

  L. Z! V/ `1 J9 ^; Z0 v# ~+ I, o1 K先导入 CA 证书  W6 p8 I( L/ `4 ?

9 y9 d$ S1 A& r& o( w3 V将之前创建的 ca.cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.2 h5 V( }# m# l. H' g7 C
9 h! i/ k3 o& Y4 \
1. 使用 IKEv2 + EAP 认证
3 ^5 _7 g8 s- z9 U( g" [1 e7 A. v. A' o. z0 o( ~+ {) u2 L
找到手机上 “设置->VPN->添加配置”, 选 IKEv2  Z2 T* J0 A3 \& m( o9 g' V9 B: S' K) t

+ U' Z8 B* o0 Y  C$ G  z1 E8 O描述: 随便填# G; N7 a* P: h0 t' D
服务器: 填url或ip
, ^& F- P4 \- J8 {; [+ b) z5 N远程ID: ipsec.conf 中的 leftid
+ F# c2 K4 m/ @: P用户鉴定: 用户名3 ^& q5 E* O  \% _
用户名: EAP 项用户名
1 G% D( _! I6 q) a5 X$ o: z密码: EAP 项密码, s8 o9 u0 m& X" S5 ?$ f) E, j/ X
2. 使用 IKEv2 + 客户端证书 认证8 |$ w7 e6 K- B: C7 i/ S/ ~# ]& ]
% c' `+ x  N9 F  L- b# z7 o
把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开.  导入到手机(此时需要之前设置的证书密码).( Y$ D, N8 L7 `3 r4 D+ {9 _

  y5 o0 C' ~! [2 p6 ^- Y找到手机上 “设置->VPN->添加配置”, 选 IKEv2
4 z, D( H9 ]4 k! L" P) o/ S& Y. m  b; I7 T& O9 J9 v" v
描述: 随便填, X# H, h7 |6 _3 N  W
服务器: 填url或ip+ ^1 P- o: e- m
远程ID: ipsec.conf 中的 leftid. B5 s; D% `& a( @$ _. P2 b5 e
用户鉴定: 证书% t4 K8 z1 c* H4 @
证书: 选择安装完的客户端证书4 Z& S% }* ?, o1 ^+ V+ r+ c3 z
3. 使用 IKEv2 + 预设密钥 认证
/ t  j( F" |9 C, _* E$ S6 h7 Z
8 ?. ]6 M5 V0 l* w6 U! U0 A" f7 _% P找到手机上 “设置->VPN->添加配置”, 选 IKEv2
* Y7 x- g" w4 L/ I6 B
& p8 A0 z% F& v& ~3 G8 P9 c描述: 随便填
0 k" N5 q( w0 O0 \服务器: 填url或ip; u- C  B" R6 D
远程ID: ipsec.conf 中的 leftid5 h4 m6 S6 e# q0 X. W2 K% E- U
用户鉴定: 无! ~3 V- c- F/ h2 @
使用证书: 关, b) P6 `. F# z6 N
密钥: PSK 项密钥
; ^5 T. ?3 c3 RWindows 106 Q: D1 b5 V4 h9 V) C! U

+ C: O5 U5 E% v0 K. U2 W! E* k导入证书:2 M. C2 s3 k1 b- A6 H
' B  @$ l: I+ }
将 CA 根证书 ca.cert.pem 重命名为 ca.cert.crt
6 f$ [" d* q1 C; H) e5 j+ I# r双击 ca.cert.crt 开始安装证书3 S& X( {2 r" Y- Q5 ^8 n2 A
点击安装证书
7 I# G% K0 a- p5 c“存储位置” 选择 “本地计算机”, 下一步5 a0 Z: ^* X' V8 U1 y: E3 G9 Y
选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成.
# M6 m) C% S2 ?  S, l8 {建立连接:5 P! O! I& I$ n  l4 j9 M) f
+ M3 b% |2 z. Z0 \, }1 O, m$ m" d
“控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”
$ Y/ d3 f6 C2 K* qInternet 地址写服务器 IP 或 URL。( N$ l8 a" h8 X
描述随便写。% M9 g) j  e- [0 q0 n
用户名密码写之前配置的 EAP 的那个。
; M0 K3 M7 s. B$ [' X! ?确定
  N$ y5 C. @$ y$ \8 e- f转到 控制面板网络和 Internet网络连接5 \( l: C4 N& H9 u2 z! v* J# V& `
在新建的 VPN 连接上右键属性然后切换到“安全”选项卡, ?( B( d% ~- n) {, W1 G. i
VPN 类型选 IKEv2
1 k! J4 {+ o5 y# y7 H数据加密选“需要加密”( O- l. s' M" m* O- ?
身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。/ y9 V* @7 d% j8 d9 D
再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.8 n. Y) B* h! z1 }) e7 m7 g
点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出.
, _* ]: w, u$ }* p# O: t, JVPN 配置完成
! O2 f0 M/ _5 ?* g2 v* j( v5 y, b9 G# F9 o1 `* |4 x( F0 a4 _
Windows 7 导入证书略有不同- z# N9 D2 L/ b7 p2 }
4 r  l! @4 n& d9 ?+ p
开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
0 P( Q! N" p' c% j3 Z, b/ ?9 I「文件」-「添加/删除管理单元」,添加「证书」单元
% ~' E/ g: Y5 [( I" |  Y证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
7 E2 H8 C7 o5 w2 J. h# [9 |( V9 J在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。! I9 {6 L- K4 e  g( G3 G
选择 CA 证书 ca.cert.crt 导入即可
9 t2 L+ s% c4 E9 D注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:32 , Processed in 0.022481 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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