找回密码
 注册
查看: 4826|回复: 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 服务器配置:7 }7 l  p2 O$ ~3 @, ?+ F1 C" C

% ]; U3 |' j. ?; DCentOS 7 / 512M / 20G ssd , $5/月. 详情请看 这里
+ A8 D( d' r3 e禁用 firewallD, 启用 iptables.! c# l, h3 J) A2 `) v0 T
strongSwan 版本 5.2
. K& h& l9 y( |xl2tpd 版本 1.3.6
% K2 ^2 T+ Q5 J: G0 G* O4 v% M安装 strongSwan' ]( s9 k8 `3 \* w6 y# I
$ _5 \8 ]( n/ B( `. f0 g! B# q4 g
strongSwan 的发行版已包含在 EPEL 源中, 如果没有添加 EPEL 源, 请看 <<CentOS 7 配置 LNMP + FTP 环境>> 添加 EPEL 源.
& K5 F, u: c6 B% w1 R6 ~$ C4 d
- f* ~2 ~* l; Y6 w2 h: ?* u添加完 EPEL 源后输入如下命令
8 o. G) S4 J3 \3 N, N) o8 s0 O1 O/ y( f( s; p
当前为 5.4.0 版本, 官网上最新为 5.5.0, 但是需要编译安装.
7 L. Y- @2 @' R2 N: D% A
" B  o  Z2 e, P/ F: f# W- U9 N4 [4 N1
# E; {# m' g' Z/ r5 s7 Z) S2/ y! r+ p( {0 S
3
& Z0 {* A9 M! ?yum install strongswan# t( n, B% Z& s4 h) h, }/ C
systemctl enable strongswan
$ {8 J" X; s' u$ v# [0 W6 Nsystemctl start strongswan5 q9 ?8 ?! ]6 k- u  F3 c
生成证书3 _! W" W' j: G& C# E
) g/ v/ e$ v- l- @5 w; }5 C# E
生成 CA 根证书
7 e8 G* a1 r! T% ~% t2 ]3 X9 B+ z* v8 M* F: n4 K
1. 生成一个私钥:( M' Q* R( q( j9 M+ F
; t6 j! Z$ b1 b, k; P. q- ^
1. p& w( y* h; u3 P5 p* ]  x% {' e, Q
strongswan pki --gen --outform pem > ca.key.pem
* j8 u  X; g% a3 `$ Z: t% m2. 基于这个私钥自己签一个 CA 根证书:7 m$ Z& y9 s7 q: T' j* P8 B

) ?. W4 A: N8 S1
4 x  g$ A' e/ b- A; N8 p6 G; tstrongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
3 T7 x) {! }7 Y3 j: P/ F–self 表示自签证书0 l0 i0 N* I% S! o& A9 X
–in 是输入的私钥/ C4 U3 b9 Y+ U4 D  H7 u
–dn 是判别名4 N/ y$ b* D' v  h" V/ K

+ C( ?/ e; }& ]) w+ ~& X1 E* ~  jC 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名
2 S3 A5 z6 o! [3 t% {O 组织名称2 O. l: A+ {9 M9 p
CN 友好显示的通用名
2 N5 R# k) [- c) `–ca 表示生成 CA 根证书# C8 L6 d4 J: U' U/ D
–lifetime 为有效期, 单位是天
9 M. {" V  x& R- i- K
4 {% x! ?- G# n6 f. n6 o7 i+ w' v生成服务器端证书
7 n0 [  V" d4 G; I4 Q& z' m/ X8 C
. H! x- @4 P0 p; L" z+ }" D1. 同样先生成一个私钥: W- n( }, K' ]" |

8 E. A  a% j% D7 R1
* C7 ?9 k% L) Q6 G+ H+ Q* F$ w4 Ystrongswan pki --gen --outform pem > server.key.pem
+ h2 n, d) s9 g, J1 [2. 用我们刚才自签的 CA 证书给自己发一个服务器证书:% S& v3 _" S# \9 P/ p; M0 u5 R& [
/ Z1 l- ^. r% q0 c5 |+ a
1
. p9 n3 I6 M& ?8 @! L6 n2
3 g/ r& D6 |- K# B9 o; f! |8 a, W3 n3
' t! C8 m- H8 Y0 [5 M4 H( i2 z4
1 _. ]$ j- w$ Z+ ?- g4 U5, u4 i/ d" U0 c
#从私钥生成公钥, n& W% K) d' f0 R# K
strongswan pki --pub --in server.key.pem --outform pem > server.pub.pem# M4 H7 q9 [8 I! [, G+ i! m5 s
% c, W4 j0 }# n2 j' T# `
#用刚生成的公钥生成服务器证书% l( q2 Z  ^2 Y* p( O! P
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.pem9 g2 ]; \/ \6 d! p
–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。
- J: S% |9 m& L! E9 H/ W6 O: D–dn, –san,–flag 是一些客户端方面的特殊要求:/ x. G9 t- V3 O; g! W

0 M' A" F! F2 L! Z$ O# qiOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;2 {9 ?+ E( R: b
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;
  J2 ?! ]7 T7 x, Z$ c非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;8 @$ m" d5 r( l; G! M
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。
$ T8 n+ s1 }, A' |& T) m生成客户端证书(可选)( F& b, |! w, i
0 d7 e" K! V; s& M
客户端证书是在启用客户端证书验证的时候, 用于验证客户端用户身份的. 每个用户一个证书. 如果需要很高的安全性, 可以用客户端证书, 一般情况下, 不需要使用., d+ I1 \3 h3 c) _; j
) K  _& l9 }/ z
1. 依然是生成私钥:' k/ q* x( B6 A/ \' i5 {

, [" H" f. t% R+ @1 t. h1
  w! o; u1 q5 O# c7 Z" \; @$ K1 istrongswan pki --gen --outform pem > client.key.pem
7 P9 }* L0 O6 L# j: q6 C2 u* R2. 然后用刚才自签的 CA 证书来签客户端证书:
. ^) r. a2 U8 e8 a
0 b* g2 h" l8 V: T- v1
; J" H! J" {: Q) N2" {& z6 }* f7 b0 Z
34 P/ \0 o" J6 t: t' J: T+ K( _4 I
4
. L; K2 \% ?4 e0 h) O4 d9 ^' i2 a5! j6 R& {9 c" N, i! m9 A! c5 w
#从私钥生成公钥
, _3 }9 I- s, ostrongswan pki --pub --in client.key.pem --outform pem > client.pub.pem0 S2 L! c' q8 k5 h6 P

. g! _! R! s; l#这里就不需要上面那一堆特殊参数了: ~. N3 w7 C. e' U
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
7 i  b4 \; V2 F  L打包证书为 pkcs12
4 i" I1 E1 g1 Q9 j: l8 M7 \+ g1 W1 R+ `/ K! Y
1
7 Q2 x( B6 N% `8 W. |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.p120 I4 R4 L2 P2 c* W' i. [
此时会提示输入两次密码, 这个密码是在导入证书到其他系统时需要验证的. 没有这个密码即使别人拿到了证书也没法使用.' E0 q- `% J# T4 T6 N* G) T
6 J* \  k$ J. ?( g4 N
安装证书7 p  m; \2 L( C/ P& M9 q2 E
2 I7 W. X, ~: q7 C9 H* @! i
1$ D$ c0 m0 o, @! A% {+ F0 H
2
" h& M- V8 N& O2 y9 I/ M' _) X+ m3. l( Y* ?: Y9 `" Y
4
' F( d9 c! [4 S% L* ]+ `5) e6 ^" U2 `0 Z0 f! \& e1 O
6
/ E- S' Q2 ~' P76 P' r: c9 F3 I/ {- j7 @
cp -r ca.key.pem /etc/strongswan/ipsec.d/private/
$ r9 u, n8 s1 a' W# ^; Z  Q9 H: Pcp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/# S' b  B8 U) n% ]9 F# u
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs// p- M) y' ^( R) W5 \! A
cp -r server.pub.pem /etc/strongswan/ipsec.d/certs/# O4 }9 f' y! x$ `/ U+ f
cp -r server.key.pem /etc/strongswan/ipsec.d/private/& z/ f* s- B; j' t: @
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/
% H8 N3 w4 f/ F) ^+ k- O; y1 icp -r client.key.pem /etc/strongswan/ipsec.d/private/& E$ `3 H" d$ v0 l4 x
把 CA 证书(ca.cert.pem)、客户端证书(client.cert.pem)和 .p12 证书(client.cert.p12)用 FTP 复制出来给客户端用4 z! e" I1 @+ j  D, b4 W+ C% d
% B9 \, b! ?2 ~
配置 vpn
/ O2 m7 M0 B1 K; P. e! t$ J$ z6 P8 \8 R+ A% h; H
先修改主配置
# g# N; ?" L6 l% {7 x- p& n: x8 _: Z+ U- R" y0 ^& B8 `. T6 _) \
官方文档
  T  x' [3 l; i8 v# i. k% U# f3 B4 k3 W
1
" Q) @* ^: Y% lnano /etc/strongswan/ipsec.conf  d1 z" |. U* a3 b' V7 T
下面是一些常用的设置说明$ y  o6 K, T" c9 S

( J; [' r7 T/ y; Q% e7 J1; W4 j) [- a9 Z. v, J
2* e3 a" \/ |" ?: n& B8 l2 n' V
3
2 A/ W: k( Q2 T( X4/ @& z8 P1 R- C" N4 k
5
' v7 j: ^! W7 i9 H% K6
6 x, ~3 F. J, x' ~3 G7, N) H% k7 w+ f
8, v9 K  p  q0 |$ X
9" F* J' L8 _5 E6 H9 Q
10# r/ B# A# |) _3 g) O9 v- `
118 \+ K; q. k1 x& u1 E
12
' J/ M; ]0 B/ Y) O1 R6 V4 h13
- A! b. u, y) N2 O4 \  }142 X4 p" N) a/ s! }9 n
15
7 p, }- \; G8 o0 n163 g+ _7 f& _3 h2 m$ J
17" }* k" H0 r7 \4 L: [' q; {5 `
188 G5 M1 m5 t/ D) _
194 {0 r! v- I4 `' }$ o) c& {: p
20
% y/ q4 s! m# _7 U; o21
8 w9 x3 x7 m; \5 I, s22
. n2 h* ~+ \8 u. O4 A8 l( a23
; A0 r: M+ k: p1 |# }: J8 W8 G24
8 {  p4 |" b" _0 {' c25
, o. I7 C! f* M7 n26
$ ^! e& W' i0 Z9 ^: K27
) M% g( Y+ g( V- J2 S# f28' l' w  t2 N% d$ N- ?# S8 v0 y
29
; e( x7 H& Q- S# J30
& @, ~3 T3 i5 l& P3 P- |" l31
2 [# `' x, V' h$ L+ A: i2 n/ n  f6 n32
+ K; v* G4 g$ H- z  b$ }3 R: G' V: u33
# d- q+ W8 k$ l2 B; v7 d/ l34/ O  N3 t1 ~' H* n4 b( U
35
5 u- D) G0 _: ?$ ]36$ `1 B( U  m( w5 a
37: `! Y- A3 A4 D! s
38
  R% ~, V% {  R8 _' \39
! {# W. A0 _: m% o# P- i40
+ T/ \" x$ q) E; _9 [7 P413 N4 U+ \* N% C: J
42, h. B6 R1 t) ?6 J
43
6 }4 C$ \' {! J# w; q& z  J444 n% e$ b: b$ z$ u
45
8 S% t+ B/ }+ _1 b463 f" }+ D( H5 R$ q8 }" O6 j
47
4 r" G" ]$ n6 o& Z48. b+ r: c! U% J& e/ `
490 g. L6 R% }$ e. [# R) a, n) r9 Q
50% |3 c) E1 x- `, q
51
4 z# _' P" a; X9 X; d52+ m6 [. ^3 J* q; G
53
4 q* T: [1 x7 }- E544 R) W8 o8 l  b7 T  M6 l
558 P% x& J& d2 c3 ]& i* W6 l6 k4 q4 D
560 J# [9 Y8 _* T* y/ r( W! W
57
! n* y6 `2 J% v+ H/ i# J0 v' ?( [58
  }8 P( B* n* f7 b$ H: C* z) V59
  ?' N/ A+ @6 e8 t7 H603 ]% m  v. b, D
61
& \9 k+ i. e( C) s62  {) p' N% K' O: `; b
63
+ I% c' \1 w/ o; {8 w% u9 p+ O64( U* W1 W: h6 m/ l
65
: q. r' r2 f2 W! n1 Y( }4 }66* `+ a7 d) q* c) e2 U) \% J6 `* a
67
4 @3 _( U  ~, M2 @% M1 Z1 s! G1 T8 o68+ m& {7 Q' R" w3 K' p
69
; @, _: X0 B8 y( i0 J7 {70
  I" J9 ]" L+ X5 ]. }1 l71
" A* ~7 t* j: [- z+ Z72
7 H! k7 }9 s" u7 d( p( m# v1 r73, E# V3 `5 i' S9 t' b9 m
74
3 e$ s* Q/ Q* \75: L% U4 p* H1 r3 l$ K
76! z/ A1 m; }1 U5 m" w$ O6 F& s
778 V8 _  ]" H; T! |
78
7 S7 ~: ?9 v" Z) S6 q& ]# b7 ~79
* q! U# Q" Y2 H4 x1 D& Q" P* O80; c( F, c) c' T% k% }: s) {. [7 S
81
3 J5 R7 f; P$ y% v82
* n* z- [& z  ?83
% i# \5 n* Q9 L6 G6 p) a$ W: h' \: x84. J% h- a- F& d5 g7 j6 G
850 |5 x8 ^; {8 y) Z+ ]/ @
86
( h% }+ f$ d  o1 x9 x873 P2 b& q. E7 M& _0 k2 n2 ~
88
: g8 c( V. w, S- d5 E# A9 j- X893 T5 D* \) }" r7 \4 h( N- ~- Z  ~
90
0 Y% c0 y! Y, ^9 c5 c% I91
+ D3 g2 N: L) b2 x92$ P" A! o: u( I1 \& o; t+ C1 d
93! n* H% l' V. {( E; ]
94
& [9 Q' u& b& j956 \" k4 _0 x& X* E( @6 t( @, {4 }
96+ J8 g8 z' e: Q0 D6 U
97
& N! f0 _/ ^( C5 W( ?; S3 g1 |98
" E  Q/ E8 h! |: x+ t; T6 E99
) `/ i8 X" d5 l* u4 Y100
% e/ a& V! x8 {( A# g; T- C/ M; {8 C101
  `2 a  ]1 N) {" G102) i" w; l8 s4 u5 ?
103
; e, E8 j3 \' E7 |/ t  l' c104
- [! D3 E& A, Q. Y7 P3 y% |5 }: ^105+ z! d4 Y6 A  C4 s$ B1 N/ X
106
: K  E% P8 |/ Y) [107
- [. P- q% K3 K: @2 w3 o108
5 D  p6 J( F2 U% y  B109
; X+ p- I6 X4 L110: e% K* v- K/ {, g5 A
1111 X9 ?# Y. b+ V
config setup
, Y. Y1 d. N* m  {  a  f * ]2 V6 C& l3 ~
    #是否缓存证书吊销列表3 b. U' r4 y( E' |! ]6 q- }
    #<em>cachecrls = yes</em>5 e" W4 X. \: B* {

1 F2 y: Z1 R* m4 T9 ?  ?/ l. k    #是否严格执行证书吊销规则
% ]4 _# ~- d9 z6 l    # strictcrlpolicy=yes
6 W9 R, }; u/ F" b( N ; G- e) y6 |& `  \) H% T3 f
    #如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.% ?' G: g6 [. F5 Z! q* t% x
    uniqueids=no
% \  I5 W* Q' P 6 X/ b  e3 M6 b' S
# p; i( D3 ]1 E4 m; p
#配置根证书, 如果不使用证书吊销列表, 可以不用这段. 命名为 %default 所有配置节都会继承它
0 s7 m$ h3 `4 ]% _& D# M% L#ca %default
' S' B8 B' k- t$ E5 S  ^& K5 H, P8 G
7 r2 x* j" w) ^" m    #证书吊销列表url,可以是 LDAP, http, 或文件路径
! ~; h! ?& q3 n    #crluri = <uri>
- z0 X  q: q3 w
; h6 Z2 K6 @  _
% ^: d8 {( g/ x# @1 L#定义连接项, 命名为 %default 所有连接都会继承它! }+ b0 l$ y6 ?5 a( h/ }3 v
conn %default
% c0 K  {! ]2 W' n1 D% r3 m/ V
+ `8 D# P7 m" |9 M& {    #是否启用压缩, yes 表示如果支持压缩会启用.
" Y# A# _" q9 |, X; ^$ W+ u    compress = yes
7 {' s5 O& _9 @$ B5 l
) c2 }  a9 L+ y$ Q; c    #当意外断开后尝试的操作, hold, 保持并重连直到超时.
+ p: @/ s% ~* l/ y0 Z6 a2 c$ p    dpdaction = hold
6 Z( N# V' `8 H ! W9 t3 H" @' }, U6 z) T
    #意外断开后尝试重连时长
. _7 N& E4 V. J1 w, i    dpddelay = 30s
. m) U, I  X  @  y 5 d+ Y8 h* h* F- e+ s" P
    #意外断开后超时时长, 只对 IKEv1 起作用9 g& T* h' H9 s! g
    dpdtimeout = 60s
" ], }! F) R* ^0 T$ i$ I7 M% p
! V0 L4 I1 s/ s' D    #闲置时长,超过后断开连接.
7 {, p' m2 z. o+ b  r0 C% a" Y    inactivity = 300s) Q9 I8 p. v) q: q5 S7 C6 b8 s
  a4 ^+ C8 `! Q7 ~2 A9 H. k& `$ S) I
    #数据传输协议加密算法列表
/ i. e2 i$ [8 z( R) G    esp = aes256-sha256,aes256-sha1,3des-sha1!8 z8 _4 f  B; I: y6 G+ O
2 \+ U) ~4 B+ E% b$ {% m! u
    #密钥交换协议加密算法列表) P. Q( m; o9 G6 r  Z0 a1 s! s: B
    ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!" m/ S% P, I, K5 O
& x5 z9 z0 I& }: m6 K
    #默认的密钥交换算法, ike 为自动, 优先使用 IKEv29 A2 W3 V3 g% G! L! G' X! a/ ]
    keyexchange = ike
  e* F5 R0 r( ?5 x2 u  ?1 M; r
5 A8 V9 r( a2 @( n# S    #服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.+ M7 a6 _$ j0 Q; R+ ]0 E
    left = %any" A# U+ E) ?5 P
    #客户端ip, 同上- H) f2 q0 Y% s$ ^. I2 j
    right = %any9 |, d" W! f* T6 [
0 Z2 i: _1 l! k; d
    #指定服务端与客户端的dns, 多个用","分隔. S8 F8 P  S! F$ Y9 |7 v4 s+ G
    leftdns = 8.8.8.8,8.8.4.41 A( X# m! T+ [/ c5 S- H/ M
    rightdns = 8.8.8.8,8.8.4.4
  Q% h: v- U% z1 d- y
8 `* B( A6 Q; X    #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500& C* z* G7 s6 E' T
    #leftikeport = <port>. d( Y+ s# _9 M1 U, Q% _1 a/ T% z
; d  J- v" S8 ]4 Z7 D6 ^3 y0 H
    #服务器端虚拟ip地址
$ Q( M" b, c" ?, x2 Z" J  U- D    #leftsourceip = %config
8 _. H3 Z, g  D5 ^0 j. A    #客户端虚拟ip段
( W2 }7 R1 o. N: _: H% z! B    rightsourceip = 10.0.0.0/248 O  O3 u) k) u
9 p7 z/ o4 v0 g% S' T, O& u
    #服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字' {! Z3 S" @1 g6 H
    leftsubnet = 0.0.0.0/02 X5 {! `+ A6 P5 h; ?6 ^* ^
    #rightsubnet = <ip subnet>[[<proto/port>]][,...]
8 c' q4 }1 N6 o
: \$ X9 n2 l2 p7 k$ |: ^0 dconn IKEv2-BASE- a1 s: O" c7 S" K# T: {; v

  G& K# k! W# b( D1 o    #服务器端根证书DN名称
0 `% D! P: B7 c$ N" b# X    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"
  q. b/ m/ j3 t- _+ B & Y7 M; n  a7 B% C  G
    #服务器证书, 可以是 PEM 或 DER 格式
" c! d& ]* n, L$ ^! \    leftcert = server.cert.pem
! [* t" H5 |& M    #不指定客户端证书路径7 U  Z0 y8 c- o. L$ e
    #rightcert = <path>1 n0 r# f8 q( ~6 }8 V

" \( q7 J3 b: ^2 ]* W9 \   #指定服务器证书的公钥8 Q/ ?& R1 ~( D+ \/ D
    leftsigkey = server.pub.pem% L6 o. c: z1 @* \% z" O" c% k
    #rightsigkey = <raw public key> | <path to public key>
$ K+ }. l8 H" M; x" J& |2 B: K
8 l3 {- p; O2 ~/ I( g. O% j    #是否发送服务器证书到客户端( Z/ Z( K/ U* J. A% q4 H
    leftsendcert = always2 @; R1 R: J4 S  z: F. _$ J; H
    #客户端不发送证书5 _* i4 }0 ]2 ~7 ]
    rightsendcert = never
. ~, H5 r  |% N% ]- P( S + }( m* U) w" d3 H
    #服务端认证方法,使用证书' C4 e: [2 p; J9 w
    leftauth = pubkey  g& O2 x4 u8 V: ]& v
    #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用
6 A. F2 F& P" v) T9 y    rightauth = eap-mschapv2
& u1 r9 T& i& v: r8 t  I   `1 Q5 L3 K! N' a  R) W
    #服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行.: E: {7 O, L; @+ _0 q
    leftid = vpn.itnmg.net
. r& u' x. h. u( L0 Z/ h    #客户端id, 任意  x3 s" Y) c6 w! m9 {
    rightid = %any
, Q  e) o: }0 K1 ?9 d% x. M
+ R* V( m9 [# h# W#ios, mac os, win7+, linux
$ ?0 f, ~7 W) [2 d" g" Q# Sconn IKEv2-EAP& W- |& ?& q- d9 N4 {
    also=IKEv2-BASE
; r8 [: q5 V4 M" H
) q& {! e5 \& ?$ w, A: O    #指定客户端eap id! M4 T/ Z3 R5 `' e0 k9 F* Q) Y
    eap_identity = %any& @! \- F" d1 y9 [6 m
* `# J# l7 E/ g1 [, @
    #不自动重置密钥
- x9 }) m. z* K0 L9 G    rekey = no
" \/ K2 T  i" \* Y! M  s  t0 A. Q4 b( b% {
3 F3 R5 e7 m) @7 P( j2 f$ M8 a    #开启IKE 消息分片
( F$ Q: S, i/ Z" T" }    fragmentation = yes0 }# n/ h. G) d0 E

4 u6 j% i0 L0 i4 f: C+ c" q    #当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.! G1 T+ o: T6 ?8 G; I: u7 l5 h* O$ F
    auto = add1 ?2 v# g2 V8 u  a& k
我的设置项8 A) e+ V# h8 N: T% b
0 t4 s+ k( Q+ r- p1 i
1' h  C( m* A, [0 @# q) H, w
2: p# w1 |( K' A+ s3 i
37 _6 X% f6 w% ?% \" ~
4
: M7 j  J, m7 }! b6 h# t* t3 N5
. g1 A/ T6 j4 c7 p  w/ P) Z6
& I9 N8 o) F: U: s76 W# y' M5 P: W4 |3 W
8
% e, H0 \; `, C; `+ |, n' A! y% p" X9
. j* z2 I0 `) H( q9 l1 ~10
: H3 P1 \8 o0 p/ o115 s: G0 o. S  @# T* j/ X$ o3 ^6 |
129 P( `4 r8 c' Y, _$ P+ _) ]
13
8 J* g: @( G. J( \. X14
4 R7 B3 Z& o% r9 I' X( K15/ {% [4 y0 J2 P# p8 f
162 E  a- Y2 Q; |7 ^9 q/ n2 U2 F
171 }6 G# O) l+ B
18: h) z( Y7 C, \: b& M
19
7 s, U) G$ e9 C. o- J4 P7 t20
2 s8 m" B0 ^8 h3 Z6 Q2 c- T21
& r5 ], o9 f% V, g  g4 `0 J( ^. x220 {2 @6 ?- b- q
23; d. o1 R+ r5 _5 n9 R/ a
24
$ p# b) B. |, v, F. C25
+ u5 a2 \4 F: M2 h. p' Q5 }, z26
, l% x" R3 R# {4 a" B" D1 F27
# I  [- a; @" Q6 [289 d# m4 u) h4 T* N
29
3 A& J0 K# b) d3 s# [3 cconfig setup) ^$ T0 p4 ~' c# ], Q
    uniqueids=no
6 d/ F; b, F; A0 \$ t . |+ k9 Y3 v' b
conn %default; a  A3 A: f8 r3 @
    compress = yes1 o- R4 W" `: @- d- E4 C
    esp = aes256-sha256,aes256-sha1,3des-sha1!
3 v/ l! b) d. a    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!" _* V' C1 N# F4 r/ m. ?' H
    keyexchange = ike: s; r6 {. k9 g3 D" ?# G! x
    keyingtries = 1
; }3 }, V# [' I! G    leftdns = 8.8.8.8,8.8.4.4. \+ p) v/ y) X! {: f
    rightdns = 8.8.8.8,8.8.4.4
0 m7 [) u% {0 Y1 J! w; W
1 e; o$ {' X' [; {; m9 R  Uconn ikev2-eap5 ~) d9 S, `. D, d; Z! h2 @
    leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"
# t: z# l. k7 m! @4 g" i    leftcert = server.cert.pem
( ~6 W/ s+ g! G* W' v# s8 |    leftsendcert = always6 D. P: |% n2 m0 e# T
    rightsendcert = never5 W4 Y! \8 d) V; U& u
    leftid = @vpn.itnmg.net
  {, M, k) F: e    left = %any
+ C+ y* Y4 m3 U. C    right = %any/ ^% F0 i4 {6 {4 p  }
    leftauth = pubkey
( K! ^4 k+ w- I    rightauth = eap-mschapv2& h& f3 J4 U. @/ d
    leftfirewall = yes! V9 g# s1 ]' k# o  d; ]3 N3 U
    leftsubnet = 0.0.0.0/0- _# X/ H) l( `% v
    rightsourceip = 10.1.0.0/16
3 T" o( \/ v( j% T    fragmentation = yes) W- J: [( z8 e
    rekey = no
- S7 c  p4 Q- T0 o$ l' C* y+ \    eap_identity=%any- @# C2 U" y3 E  C7 y' P- M' Y
    auto = add1 j2 n9 t* y, E# G) r: S

  F, U$ K7 O! a+ r+ J* }
; {/ {+ e8 {, ^; C7 I修改 dns 配置! _9 m8 {/ q- @

: Q5 }& }1 _5 S& T7 I+ Kv5.1.2 之后, 所有插件配置都分散在 /etc/strongswan/strongswan.d/ 目录中.8 g! m" W! ^( b0 ?2 ~+ }
9 C+ w& N) [' o1 I$ s; g! f
1
+ S3 ]( S; `' a+ c* m1 ]0 tnano /etc/strongswan/strongswan.d/charon.conf" K. g$ V* {  p) W7 u0 G( }
修改如下
# o* J0 Z/ x) x7 ^* }$ k3 U7 i( _. q+ e- r' ^% N
1
9 m+ {0 I. d4 r6 z$ J2$ k  e7 W$ |* d: l" l; e5 C; r
3
, |" w4 S; ~' L* m- R) }, z" M4 U$ {49 x: g( Q  U5 q
5
/ T# o2 ~* Z1 p0 ^* w8 E6# g  |. W, d8 g8 `+ y1 F
7
* n& h' h% C* B81 n) V0 w+ ]6 g2 A+ e) Q
9
1 e, `% t% D; r; s: e10
- L$ N3 B( @2 d11; ?& u3 w- n! F; |/ |' [/ `
12) U" [: z$ Q, e3 ~- ?+ w# P6 }
13
( \2 b, ^: \5 `8 x14
% p) Y: @. M; _5 ^  H- ^15- t) R1 G1 ~8 ^" ~( R. E+ Z/ h
16' m5 ?  P2 i! j. h. J) X
17
& L/ n* X0 N* L3 t18
+ e2 J$ b' O' Z2 W5 B19& V- n! R# M# w3 y  @
207 B3 f: [) |: b4 p# ^/ O, W* M  h
21
2 V  Q. |' Z/ S9 x22  a+ d3 }: h0 V* d( t" b+ A% `$ o
23& c7 B8 z0 p7 L$ \' z8 B/ e
charon {% u% K2 d, @1 W; b/ @) N! [
    duplicheck.enable = no #同时连接多个设备,把冗余检查关闭.
7 Y1 k: @9 {, o9 z3 p# f1 i 7 T  |0 S0 r; }% r3 N9 i
    # windows 公用 dns
9 f: j1 i3 E! a7 O    dns1 = 8.8.8.8% H, ?+ y- a: B. d
    dns2 = 8.8.4.49 D% l' Z2 _8 [  V/ [# a& `
# v$ f  F& @9 Y6 T+ P: K& n8 }
    #以下是日志输出, 生产环境请关闭.
  s. y% L8 A0 `( J3 W( @, N' f% ~+ H    filelog {1 F, u& s" q) p; v3 n( t
        /var/log/charon.log {, o" a3 ~9 U: F0 }/ T
            # add a timestamp prefix+ ]+ C% e( c$ U" D8 E
            time_format = %b %e %T
# M% g" \7 l( O            # prepend connection name, simplifies grepping
. \& N# I/ N8 j# ?% r  e* k( O            ike_name = yes
  n3 P3 H  t& a6 x            # overwrite existing files0 {" I' `/ O4 A2 I' p; f8 Q
            append = no
3 ^2 `1 J" [! z' G, F/ i            # increase default loglevel for all daemon subsystems) ~/ a  V! f# l& t+ v5 o1 J7 N
            default = 1
) a: }8 D9 s) L" o) [- L# e            # flush each line to disk
" c$ a5 r6 c! {7 V: C# \            flush_line = yes5 N' n' ^9 U6 ^) l! y
        }
, u) S0 V4 K2 l- {( [4 E    }
, ^: w- t, o3 V9 r: y# B}
4 Y4 g: ^) W2 H) b. \; n配置验证方式的用户名与密码
1 b; w1 x7 m, o' Q* v
0 e2 p3 v( P' V0 i- Z! S) L: W3 P1
. v2 z* |+ ~* A1 O6 Z, P/ dnano /etc/strongswan/ipsec.secrets! j! B% W. d1 o
下面添加用户
% A" V8 f: X( _+ H2 P
7 g2 _. y+ R+ G  L7 j' b10 h) \$ M8 P' |0 r" U2 i4 E
2
+ |/ [) ]8 z  e: ?) }  L3
& B" l( j- l6 z9 Z7 J8 \45 L, M8 y* g* M5 u) e! I
5
7 U& m& o( o$ h( v: h6
7 i) O- K3 L/ O* a% d% U79 |+ b8 p! l0 m& c. K
8
1 O( D/ k* O3 N3 `93 B) K$ g% Y. a1 C9 S" d
10
$ z; M6 ^8 {) ?4 }) N( z117 }5 ]4 n4 M6 ~8 _' `
12
4 ^+ t" k6 z, G! ]' Q% |13) R' P# E. ]0 B" a
145 D2 O; P4 g% W# p2 g$ X
#使用证书验证时的服务器端私钥
6 q! Z) x3 w) J( z9 c" E' {' _#格式 : RSA <private key file> [ <passphrase> | %prompt ]( Y0 S8 g+ c# U% B
: RSA server.key.pem  n8 \% {' ]  x, F7 g
8 `4 w2 u+ L1 F5 D; R
#使用预设加密密钥, 越长越好
+ s, \# j  e% s+ {. x' U# ]#格式 [ <id selectors> ] : PSK <secret>' ?; H/ J' I7 A* R  Y
%any : PSK "预设加密密钥"
$ e+ j; l0 h' g# @" x
2 _: R2 F& S6 g#EAP 方式, 格式同 psk 相同0 |# I8 n! F0 \. {
用户名 : EAP "密码"
' w7 y' S$ `' I. h & i8 A  N2 a: e( i( Y
#XAUTH 方式, 只适用于 IKEv1! y# `& k$ S5 H8 T5 X. i
#格式 [ <servername> ] <username> : XAUTH "<password>"1 l+ d' E) g& o& Y( N
用户名 : XAUTH "密码"
$ d% h4 H6 r- @& r6 D5 `8 j开启内核转发
$ k; [' K& z9 y1 I# B8 ]
" S, y' ]% v  X* b* w1
5 `( e3 O3 G0 P- }  P2 L+ Wnano /etc/sysctl.conf9 u, i. d0 o8 J6 h) V* ?
写入以下配置
) y9 n2 T; Q$ d3 y, a5 I" L+ S
1- `' @' W: c! I# v: j$ Y
2
2 H8 B4 E7 |, `, P* |& t3: {# @* C* e" O/ `9 r0 Y
# VPN/ `4 d9 ^' h" }  x) [: D6 N
net.ipv4.ip_forward = 1; ?8 n( W/ t: [
net.ipv6.conf.all.forwarding=1
3 Z  D3 P. @: X. L) M保存退出, 执行下面命令.
. v, V# m; u7 \( i* ^, i/ ^! R, C8 t( ]+ L9 R2 ^& g( k
1- |3 X  f' z9 G) U' |2 H
sysctl -p
* ^, J2 a1 d, e
, }2 A# O) U! S$ d; _" Y, `% {7 T1 q9 Z  J5 U- j
配置防火墙# o) a2 R- z, @: B8 p0 ?
8 O* I6 L" B. d8 u
iptables 配置方法
7 {3 o% a( s2 S! O# l( I& u* F
将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.  p4 d# i/ H. h' r2 l& S

8 j8 E; R9 E6 x: [/ A7 Y1
0 f# S% y( H' K8 Z! @2" Z, h# N5 j  y) t2 @
38 d5 F/ h4 H" \
4" `+ m- u) n: u2 i% J5 \6 G' p5 ~3 {
57 j& _8 }, a7 A, {' v. ]( |/ u9 c
6
1 m2 p0 V: e7 ~: P! R4 ^& g6 A74 B9 H4 N) Q: m
8' F5 L$ |1 L0 Y, D5 I3 u1 g
93 h' v# x: D9 K
10. E  f5 b& o6 x1 e% }
11  U  u, z: \" E, n) t. [( N( u
12/ b6 w) a3 z$ V& K+ d1 P
134 B) q( V7 _1 p# X# j
14
+ M$ X; ]7 B: r* J15( o8 y& _0 i- b! k3 S6 m* Y
164 q) P8 X) K! Y0 j3 }. p
#开放端口
- n- b- e8 q; E" X% _iptables -A INPUT -p udp --dport 500 -j ACCEPT
& V( j" b1 N4 C$ G3 f& Biptables -A INPUT -p udp --dport 4500 -j ACCEPT
5 E+ E6 W4 _3 O' ^) G9 j % n/ G+ d# W3 H2 T9 r
#启用ip伪装1 V+ ~2 L  g+ g; `. o1 h
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT7 M0 y, P" y% H, ^( }
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE3 H3 |: f  b4 e- r

- y% R& k0 `8 S( C' y9 u#添加转发
$ R: I" z- r7 `9 }; r; Tiptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT
( ^0 e9 R% L1 L5 ^1 Q * `0 z( Q0 a6 i1 h
#保存规则* p* _* j$ \0 ?0 j# @
service iptables save/ ]3 |7 ]" }9 ^3 y( ?/ J0 t. `/ j
2 F/ w- x. I# x3 W4 i2 c( M
#重启服务
3 ]0 @4 O9 [4 T/ |systemctl restart iptables
+ M4 _2 U; `9 o9 y+ P1 O如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.- G) r; I7 `6 o# B; ^
4 A+ d: v' |0 L( [8 y# e" `9 o
1; g% ^- ?. e8 S5 }! o) R
nano /etc/sysconfig/iptables
; g4 H: z: K9 I( T5 G4 w: a将下面的规则部分贴进去, 不要整个复制粘贴,  根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.
8 B" F7 a5 k* o; G( x6 `7 T5 y; _" p. p9 z
1
- `6 k+ C. p5 A2, B; x/ t, t7 v+ F8 D/ M- C+ e
3
; ?- d4 K8 x% `" |3 P49 O0 l9 P* A3 A3 ?" {- z3 B
5+ Z+ ]" T5 X0 w/ @5 @
6, y. i7 W& r6 Y2 D" A1 o
7
- l/ u# j5 M8 j  {2 Q9 l8
$ r, a, |3 p5 a/ U9
- P! n! S" k4 E* }; D" S3 I: ^, D10
9 G( c7 r) I9 t. {11
  \' e2 ]# Y& o7 g0 z+ M12
6 d& s7 c# G6 I' C7 h, T6 G13
8 y4 S8 V* ]. D) ?14
$ y8 L. K8 w2 Y159 z' U- q* G: m3 E3 e
169 Q" U2 ~* i5 S" ]
17+ e1 @% n  H% a+ X; _2 ^
18& U' L: p8 {, E" |( l
19
; j/ D: z0 p1 L20# V4 [( p9 r' _' j  U
214 R  M/ ^1 G. t! f9 D. x4 e
222 m4 Q% L% b0 Q2 {1 T( O* k
*nat
: b  }$ ^. V" U- K6 I# w  g:PREROUTING ACCEPT [0:0]6 I; U5 E1 a! ?8 L( ?8 s
:INPUT ACCEPT [0:0]
8 j6 ^+ S6 n% b( _; |:OUTPUT ACCEPT [0:0], k) ]( X" O( ?# j
:POSTROUTING ACCEPT [0:0]
: f% U4 z3 D. i% d-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT5 p( w; P: Q$ Z9 C* ^2 _- X0 I
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE- K/ ]$ n, Z' K( }
COMMIT' A  Q+ y$ {( @8 u( K
*filter0 _( j7 I# Y8 f
:INPUT DROP [0:0]
% H" o. I" U: n:FORWARD DROP [0:0]( U1 K) T# K' @2 Y% ]/ W
:OUTPUT ACCEPT [0:0]
3 {( O8 _* k' b+ G* v/ I-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT( m" R# S+ B/ r1 Z! L7 v0 Z2 U
-A INPUT -p icmp -j ACCEPT
3 U) ~3 g% V: t-A INPUT -i lo -j ACCEPT
$ R( s* A' ~% r! q4 {8 o-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT  R$ Q" G) L8 }# G8 Q0 m1 A
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
5 j6 u% q8 z) w& [( Y9 D-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
$ A* E; V* z6 A4 M. H& D, B9 W-A INPUT -j REJECT --reject-with icmp-host-prohibited
4 y; H, A" ~- h: F-A FORWARD -s 10.1.0.0/16 -j ACCEPT' c( j* b; S; g3 t/ G
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
+ l; A  Q( j* h) E; MCOMMIT3 v7 M5 e# {* @$ ?$ C& Z
保存退出, 重启 iptables 使之生效." j! T" e0 @. E6 C6 r

  I' _- _" G3 l2 P1- u: ?  v3 }5 Y% O
systemctl restart iptables  P, U8 X* ^% Y3 l. O2 B
6 Y4 h; t1 M5 W6 f. w! A

- y: @8 z: C  r! _1 O# j: E+ i以下是 firewallD 的配置方法, 使用 iptables 的可以忽略.
4 G( E/ n$ i6 G. C( d7 x+ r
! L/ c2 j2 w( D! K" _firewalld 介绍请看 <<CentOS 7 firewalld 动态防火墙介绍>>
2 {8 Q3 M7 A* Y9 H2 \. O# C% _- X7 R! z& a' R# f+ r) [; f
首先将公网网卡添加到当前区域中) H$ `7 f' m: R" m. L% V

6 ~, ~4 D6 u( i) Z: B8 k# k3 Y9 v1
( n) E3 J  b" x+ [2 B2
, S/ G: I4 K9 f#查看所有网卡信息, 找出公网网卡
$ V9 y: `# m: X6 j, }ip addr; `2 I( I6 Q9 c4 [9 _1 C3 R1 i8 r3 d
编辑网卡配置5 h; \1 V! T! ]1 N; ^

& Q  \3 y2 m2 c% }5 f1
7 [: N1 N) Q  W5 `+ Y, \* G8 enano /etc/sysconfig/network-scripts/ifcfg-eth09 j( S) X& @& m1 r6 Z2 y2 A
在最末尾加上区域配置
: k! W! Q9 o, j4 u
( j9 ]; A! `! P2 ?& g16 L9 q" [4 u7 L" |
ZONE=public
* t/ C  ^& }8 V% z5 g: q保存退出,重启服务
! ?" H  q. p4 `
6 K7 [9 o9 N; r2 v; P6 d1
+ q! [& ?8 G$ V6 Z2
" D; P: E: d7 {+ L- d8 J1 \! q# Lsystemctl restart network
  K5 b1 @0 S3 P: }2 Fsystemctl restart firewalld
2 N# @# I2 O8 E5 ^) w( e0 z
- B8 @+ r5 B3 w+ `; }4 `$ i3 ]
/ |, ~5 R* U+ `7 }2 T6 r2 y, d" u然后新建一个服务
, J; ^$ A# |! n0 X
: j4 P5 U; F1 I/ q6 X5 L1% k0 X4 l2 I5 g$ V
nano /etc/firewalld/services/strongswan.xml
$ B0 f6 z8 z+ P- U' A0 n4 {填入以下内容7 m0 K' ]% B2 w5 D

+ f, M& W; k9 I6 O, C6 R1* Q2 d% u0 s1 s2 P2 L8 E2 {" s
2
( }7 G+ H+ U. R/ w% c3
* |/ e  S) n$ S4
- \( P& i- d& W2 E; ^9 s5% [2 ], C9 p4 _# S% W$ T7 b
6- v0 h( ]& r0 ^# c5 e/ }# O) C/ e
<?xml version="1.0" encoding="utf-8"?>% o3 t! V2 x- ?+ z; ]
<service>0 ]5 s! c/ {& q" c. ]
  <short>Strongswan</short>6 O( A, U0 V; @$ b; |6 j
  <description>Strongswan VPN</description>
2 H3 T# \* X' M$ M6 I  <port protocol="udp" port="500,4500"/>% q2 Q$ B" k) o1 `) k
</service>, F' O. Q4 X$ _% q
保存退出
/ F! Z' ]1 J' J' S
; `3 V2 y" ]* D# O( F" g添加服务到当前区域, 开启转发
+ B3 O& E9 t. i+ F
8 B$ W& F' `; y0 k: R1 T1
4 `+ n" ], ?7 m4 G& O2
2 G, _# V" Q! ~& P# M( K/ d3
3 a1 }; y3 f$ F( `& @4
' R8 i% U8 j! h, x  q5
- c  }; N0 M) ]- `: P' J3 m6
7 v1 @; L3 J! H  c. s70 i3 L$ c% p5 G1 {9 e
8
' g1 ^% n2 B- A9# P5 H. u+ E/ c0 x5 P6 k6 ]
10
1 B+ b) \+ t/ n3 c11
6 Q5 O3 Q# C( f' g* J1 U6 D( _$ `12
$ E7 b" J* ?9 L3 a0 \' e' H5 _13/ d5 H. C% |2 g: k/ I
14: Q. ^" `5 n/ B7 ]+ x# [
#以下命令没有指定 --zone 参数, 都是针对默认区域 public
0 Z% _  v/ \' e#为区域添加服务# `; ]# Z5 ^& E  j2 [
firewall-cmd --permanen --add-service=strongswan
/ w6 _/ G) z* {7 q% s3 z8 p( D/ f / n) p# ]$ y; z# U

7 Q- j8 I3 o. S% [% ~#启用ip伪装
# e/ T5 n( S  n3 @* Vfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" masquerade'
) c% k; U0 J4 K! u" S) o( s' ?
$ N9 t0 y& k1 z6 m2 F3 w#添加 nat 转发1 l' }4 S& m" U- Q- g
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"'
& k5 p1 {- B& J3 |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"'1 z" z: Y# r, L  _* E

% B, V/ F2 R8 p7 Z2 i# R6 `#重新加载防火墙配置7 t% G$ @) ]& D+ C2 t( e% Y
firewall-cmd --reload& Q& `4 l: r% Z
$ G1 i, J2 e: N5 \( T0 ]

* p6 t  m# ]9 T, i- a除了用 firewall-cmd 命令外, 还可以换种方法添加上面的规则.
3 ]7 d4 N% m  g' a' \! w* I
! }) w# X& L! W2 k16 L3 l% y9 l1 Y. X% S7 h( Y  d
2
6 o) P. v" _: W0 {#编辑当前区域的xml配置文件3 X8 y/ @" f. \% M+ r
nano /etc/firewalld/zones/public.xml
) x- ?/ I' q* K5 |8 K, o) G: M改成如下内容, 我这里只开放了 ssh 和 vpn 端口, 其他内容根据各自的情况修改.
+ N  e1 T* a! z8 v/ _: [4 U
0 L2 v2 \$ ^  o! T0 ]0 C2 r/ ]. \16 P7 S6 ], P0 J& e4 w
2
$ N6 {2 t+ \: F" d; Y  i3
& \8 n+ z6 }, Q% T% y* Q; i4& z: M- A0 X6 v6 E  t2 ]( D
59 @' K; G5 V8 p; w' A
6
2 |- a* v) {1 h1 Q7
8 [- Z5 h2 l/ r5 R, `8
- w$ O9 B$ Z. t! y  P1 y97 A% F+ ^" ]. ?7 ]3 J6 J
108 X. U0 y+ o9 u; M- T
11
9 z. o; H: t  W: m& P' k12( n/ B, F5 I$ Y) i& O
13
+ U( F& v) {0 y! ^, J' s14  N: s5 W; c( a% @- S5 L
15; r/ g+ f' f9 l1 U1 K
16  L4 s' \$ R% X6 Q
170 y& U/ B9 s0 U( J: R1 W$ \
18" \; Z' E) T' J" s
196 E6 z! }! D/ p
<?xml version="1.0" encoding="utf-8"?>3 j; T% s- ?7 c: W
<zone>, e/ O7 M9 @9 ]( Y0 C% ]5 P
  <short>Public</short>
3 I0 M7 t- W0 T8 D  <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>
; A$ V  @$ m% Q: H+ h/ |9 K  <service name="strongswan"/>
% g  |; P1 H$ H  <service name="ssh"/>
+ t5 N" p! j% K+ `6 D  <rule family="ipv4">
& a. w$ }! u" X$ R: ]    <source address="10.1.0.0/16"/>1 J& u; g" J0 T3 i! v. L& c
    <forward-port to-port="4500" protocol="udp" port="4500"/>
( s. P: Y& X! t7 m$ {* ~5 ?7 @  </rule>) t4 ^, B% ]  u; Y1 w" q' j
  <rule family="ipv4">
$ H( L$ }; d& D8 C* P    <source address="10.1.0.0/16"/>
: V# R+ o9 V6 y2 ?+ v    <forward-port to-port="500" protocol="udp" port="500"/>
0 C# h  J: T+ X5 ~8 q  </rule>
/ m2 J8 L: m1 t1 s$ ~  <rule family="ipv4">7 ]+ z' y. H& y/ u" w) J# C( j
    <source address="10.1.0.0/16"/>! j* _' s; F( \: {
    <masquerade/>
+ i; o) U' u. I  </rule>& u+ C3 j6 c, l. L$ d$ X
</zone>
) U: l0 m3 j" a4 W5 H1
: R" `( }- m, h9 s, W/ I/ O2
8 g! x/ B# {4 ?: O# p, a* |#重新加载防火墙配置
; Y2 c# g( ^- b8 B  H) Rfirewall-cmd --reload# N" d0 R% V# M! n
2 F* ]6 Q1 l. T1 d9 s# D
% }) H6 y1 h3 ]
配置完防火墙后重启 strongswan 服务
1 u& S' X$ E! y* Z" s0 I" ~$ l3 w& L: i
1
0 m( i" B" m& m$ g1 |  N6 A  z2, `: ?' H' w- z) U, g' g4 |
strongswan stop #使用strongswan 自身的命令停止服务
0 c$ P  {" W  R3 ~- ^6 \2 `systemctl start strongswan #使用 systemctl 命令启动服务
9 C% f% r3 N$ ]9 ]3 B8 n$ |, `这里不使用 strongswan restart 命令的原因是, 使用这条命令后, 再用 systemctl status strongswan 命令得不到正确的运行状态.. d; N& M1 W& D8 U
  S) o( s5 {/ Z+ @
至此, 服务端配置已完成.9 w5 B) k4 I, c' M* s

, |4 _' r0 _5 {  d4 \3 I- ]  t 2 z7 w& ^- J/ `- i6 j( j& l6 z( ^
9 j( I. h6 J6 ]7 r# o3 i
为了学用 firewalld , 特意用了两天时间研究, 学会了才发现, firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.$ I/ `+ c+ Y7 E, |5 k/ _2 x
) E6 p+ W" v0 g! R2 C
客户端配置
6 Y0 u' O6 M# z1 O0 L
+ h1 v9 h- B5 p: D4 i  P- @ IOS:! K% Y9 o9 S5 n/ E) a( K
$ e5 o3 F5 g5 p  @, O: `) |9 ?9 X* i
先导入 CA 证书
( @, ]; [2 S2 G. B7 Q- H; K
$ O+ H  p: o& C- Q将之前创建的 ca.cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.5 }4 U8 i! x. H! O  Q$ e! A8 ?
0 f1 h3 d8 _- q$ b5 G4 @# P
1. 使用 IKEv2 + EAP 认证4 u- b) h" {; D0 ^6 |4 E( `  Z

# `! O  u: Y* s找到手机上 “设置->VPN->添加配置”, 选 IKEv2" \/ x4 s8 V) q! @

) b4 N( j& a% z% t+ c. W7 d2 \描述: 随便填) E1 f5 R+ i/ d+ \
服务器: 填url或ip0 ^* R! Z: ?, \4 L1 }; ]
远程ID: ipsec.conf 中的 leftid+ d  Q- G! F5 G1 y# x4 i
用户鉴定: 用户名3 a* a/ {0 z& D" f5 M5 W- P
用户名: EAP 项用户名1 b  e1 M$ ^  a* I$ n' }7 n
密码: EAP 项密码4 K- r3 u6 H: x, a1 E: u0 E9 w5 u9 q
2. 使用 IKEv2 + 客户端证书 认证  R' E1 ~8 q: A& M' Z4 {" I5 [

3 K5 Y9 K$ j) B, Y- g7 s把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开.  导入到手机(此时需要之前设置的证书密码).
# Q+ c8 t/ W/ F, U
* v; ?1 ^. Y: ~* ~& E找到手机上 “设置->VPN->添加配置”, 选 IKEv2
( O4 F, C3 L" w. F8 ~6 P9 y. N9 _
描述: 随便填2 U. [; ^, n& R. ~: A
服务器: 填url或ip
* b- t- v2 T0 ]+ s远程ID: ipsec.conf 中的 leftid
' ~4 N; x4 n1 y6 k用户鉴定: 证书- K$ V6 i0 ~' l; b3 Z
证书: 选择安装完的客户端证书
3 I6 b% d1 ^! B3. 使用 IKEv2 + 预设密钥 认证
+ T7 ~, \9 Z( T8 }
8 K  b; E1 R" H找到手机上 “设置->VPN->添加配置”, 选 IKEv2
: H; g. p+ {* }, j
5 L" N1 _' y4 A8 o描述: 随便填9 e. M; b1 X* N( X5 O0 l, y- `
服务器: 填url或ip
/ \1 I" e' z* x5 e, R远程ID: ipsec.conf 中的 leftid
0 _+ W$ {& \/ q  B) K用户鉴定: 无
* q1 r. d9 u" B  M6 C0 I使用证书: 关) d6 U( u  u8 u2 L; n" ]) p9 \( z# U
密钥: PSK 项密钥3 r( O0 L. O; O  ?) K
Windows 10
& ^# Y! ^; p( W4 D3 f0 w2 o
# F5 N, s" `  [; i- m导入证书:
; a' G1 T, c' l9 W  k+ |7 a- ]) m
将 CA 根证书 ca.cert.pem 重命名为 ca.cert.crt7 Y( Q4 X# U: P. @4 ~
双击 ca.cert.crt 开始安装证书% b  h0 J/ q- O
点击安装证书
% U9 V+ r, @9 l“存储位置” 选择 “本地计算机”, 下一步6 V3 b, N9 H  }5 i
选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成./ w% W# a! D2 z& e! o
建立连接:9 Y& I6 F" n0 f& z" t  t, k& c

2 `2 C3 G" o  e( r“控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”9 I4 Q& Y- i9 G
Internet 地址写服务器 IP 或 URL。
7 x8 H/ j) z2 X3 u' l* ^% S描述随便写。) f% o2 M) |  y: v% o& o2 e6 k
用户名密码写之前配置的 EAP 的那个。  u1 s# e7 b# m
确定9 V% A- S8 G1 R/ D0 N9 w
转到 控制面板网络和 Internet网络连接2 h& O+ J# ^1 D: u4 ?. A2 l; M
在新建的 VPN 连接上右键属性然后切换到“安全”选项卡3 \0 J! B" P) {, i0 z0 s4 }2 t
VPN 类型选 IKEv2- F. i# D# E% f9 A
数据加密选“需要加密”
6 `/ U5 i6 t2 G( _, F1 r' G身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。
0 X" B* P3 ~/ A再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.
2 G2 C4 P' D& v& u4 s$ j点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出., A. _  n/ w+ j2 m& x
VPN 配置完成/ Q  e6 m9 L' q* o4 N7 K
/ K0 [1 t+ c7 }) S- E
Windows 7 导入证书略有不同
7 a( S( m0 |+ q4 s0 l  H8 S  ?' e( k2 y! X% h' z, o. a7 G+ Q
开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
4 [) Z5 _9 z9 z「文件」-「添加/删除管理单元」,添加「证书」单元8 v) B/ M, r! B3 h4 q
证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
/ Y( d; r2 D  o) O# ]: E在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。' I+ Q2 |8 F; X0 M5 |1 ?; d+ \/ h! k
选择 CA 证书 ca.cert.crt 导入即可" a4 U$ _) E8 Y; `
注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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