|
|
楼主 |
发表于 2017-9-23 10:54:40
|
显示全部楼层
这里使用的 VPS 服务器配置:: w+ S j4 ]* I0 G8 k
: m! e7 I5 F# G( W2 V. S$ o
CentOS 7 / 512M / 20G ssd , $5/月. 详情请看 这里
( R/ j9 v* c V$ n( p- T0 y禁用 firewallD, 启用 iptables.
, z4 m6 f Q! `5 @- y% tstrongSwan 版本 5.2, V' c" M5 {7 E4 q: n- @ \# ]
xl2tpd 版本 1.3.6$ M9 `! q H' M0 b5 E& g
安装 strongSwan/ P- Q, \. ^% O# s. ~
# V \! d6 Z: g* ~3 YstrongSwan 的发行版已包含在 EPEL 源中, 如果没有添加 EPEL 源, 请看 <<CentOS 7 配置 LNMP + FTP 环境>> 添加 EPEL 源.
, r% J" y- ?2 G/ P& u! \ c9 I, N: u& m# f" ^; a
添加完 EPEL 源后输入如下命令
0 f$ G! D+ a1 |# K2 L" }$ ~9 h" _& c0 p
当前为 5.4.0 版本, 官网上最新为 5.5.0, 但是需要编译安装./ m1 `4 I5 q! x2 K- o5 c
s' E8 ?6 C# n# P- x( W1
2 W$ J, \, N2 i. T& G, ~' |24 h0 x. U9 Z) b* p+ [! J
3
% r4 \% [, u c: D6 M( V( Vyum install strongswan
- P/ ^9 a. u3 N+ i2 u- U# csystemctl enable strongswan
8 _5 O& g' t- }. _8 {. gsystemctl start strongswan! Y a8 u& [5 y& m- t
生成证书4 [: w2 x7 s, \4 R, ^' P
7 Z+ V; N( @/ ]4 z/ b, X生成 CA 根证书
1 ~ ?! V" K, R6 t3 {- @0 \( e& M* e3 Y4 e( k! W5 g
1. 生成一个私钥:
2 F# k) ?+ ]4 {" ]$ F2 q) k3 y4 o1 i2 w1 D7 I: B
1
) h- i# E W; r/ t( ~strongswan pki --gen --outform pem > ca.key.pem4 r$ U1 u0 @: F1 c. m
2. 基于这个私钥自己签一个 CA 根证书:. z5 U$ ]) [6 P5 q; E
3 P" q$ f& V9 {) b* O6 L( G+ P% x10 ^4 P8 O e6 y3 F& [
strongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
9 d: Z. @( b1 q7 n! W/ q–self 表示自签证书
0 [% G6 ]5 D. p2 y5 C2 U/ a" x/ Q7 C/ u- I–in 是输入的私钥7 g) g, H- d, o& r' C. S$ v+ [
–dn 是判别名 B" ? h/ x% y! k$ r0 p# o7 d; \
8 Q( G9 p4 X8 I/ x1 k
C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名' y! r, S* Q# f% `! A0 p+ i1 D! q
O 组织名称- L! h* ^. m" l Z
CN 友好显示的通用名* y% {& q6 s* @
–ca 表示生成 CA 根证书7 R. ]6 u$ L U( C. x# i
–lifetime 为有效期, 单位是天
# R! m% u# K! j
$ W$ j3 E9 {$ S; E2 }# i; N5 \- a生成服务器端证书
1 C+ d" M8 {" {; j& e& S. J5 v8 m) p, \" p/ Z; g# v8 }
1. 同样先生成一个私钥. ]. h, m z# w @! \
3 @* ]4 w& k2 M' z0 D' T1
* ?6 W$ m( S1 sstrongswan pki --gen --outform pem > server.key.pem
6 R5 q+ a0 [' i% X2. 用我们刚才自签的 CA 证书给自己发一个服务器证书:2 Z! m: s9 I6 x! D+ M3 [" M
2 E, B" l6 J' }# d
1
- F( C# Z8 Q4 Z. U6 h2
. I; c; f( x& Z* D. ?4 ^3 |! X5 C& z8 H4 f' S g
4
, }$ [, D' D1 h0 R5 t5 Y; x9 J) K5& H, _ m. y% x
#从私钥生成公钥
$ I. T' [: g; T; o9 q; E; l+ ~, Estrongswan pki --pub --in server.key.pem --outform pem > server.pub.pem. w) K8 J; p h$ ~6 s- w
6 i) m$ |! W) Z$ N. D
#用刚生成的公钥生成服务器证书
9 H' T& b' z3 R- _* m" gstrongswan 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
: g {( ]; \* C: G# j* z: G–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。
N" `, v8 n" p& c: B2 L–dn, –san,–flag 是一些客户端方面的特殊要求:
3 W4 ]( }3 l N- k$ I1 R ]: u* Z) q7 @, }/ O
iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;; D. J% R" ^* F# w W$ j
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;; x+ P' h3 r2 ]9 g2 T
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;* T7 @& f8 O: p$ Q2 H/ p4 Z
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。1 u6 [1 \) F; N+ m/ W+ _
生成客户端证书(可选)
; M- R5 d/ y" K; F3 l
! ]+ P/ H7 g! `客户端证书是在启用客户端证书验证的时候, 用于验证客户端用户身份的. 每个用户一个证书. 如果需要很高的安全性, 可以用客户端证书, 一般情况下, 不需要使用.
7 S7 j% } Y- P5 q5 w. r: P
7 V; ]" f7 A# i" m2 f1. 依然是生成私钥:
' M U4 _9 ? F3 z7 [2 M* W8 J2 ^2 a6 W) K
1
4 P8 e0 ]" z/ q1 e' }$ p) S- dstrongswan pki --gen --outform pem > client.key.pem
& N( p* i3 ?; k! d" q5 M2. 然后用刚才自签的 CA 证书来签客户端证书:2 \# @4 G+ \: G6 M2 F
4 }- k8 j, _ s# d
1
( O6 Q3 l7 Q6 F0 |3 C2 b8 q) R: e3 S/ A5 o/ n5 h
3
: h6 i# h+ z; U' l$ K- r9 N5 I! r4
: ]/ P( W( [( R, I# U. B* }8 X52 g9 g& H' d1 O/ Y' d7 |1 `
#从私钥生成公钥# P0 E* Z9 ] C4 N; Q
strongswan pki --pub --in client.key.pem --outform pem > client.pub.pem
/ b! N( q+ }- F3 Z + R* _/ @9 x9 U X+ r( L" w
#这里就不需要上面那一堆特殊参数了: t0 f8 G3 j. H; _, H
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+ `: _) O Q n2 f* X
打包证书为 pkcs12$ ^0 F9 ~, m+ A$ ~
* G) s5 b% U" _! x5 L
1
: ?$ a* v+ |2 q# f: oopenssl 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
$ H7 k3 i( f2 T. B' i& N此时会提示输入两次密码, 这个密码是在导入证书到其他系统时需要验证的. 没有这个密码即使别人拿到了证书也没法使用.2 c( T5 L! a4 y
; ^" R& c2 I4 }% ~ J3 u% b
安装证书
D1 L9 D B' T7 @: b
h4 i: o+ ~- A1
- q, ~. h4 F- a6 L# o% X2
}) J7 I" u, |% M8 ?' D3/ Z% k5 x4 f0 Z, |0 U1 s) q* N/ n0 @. G
4
' z3 ]: X! O5 C/ y+ e9 ~5
! ?) b1 v. X% T7 V9 Q& w6 t# T66 e5 c/ {3 [! ~6 C; m; {
7; J3 A8 K4 M9 V
cp -r ca.key.pem /etc/strongswan/ipsec.d/private/" |4 v3 L" a: O' D* b
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
: a$ Q; u" M/ L% tcp -r server.cert.pem /etc/strongswan/ipsec.d/certs/0 `1 m5 J# V& D5 z, T4 I% T
cp -r server.pub.pem /etc/strongswan/ipsec.d/certs// |1 `) v* e* T/ J9 s
cp -r server.key.pem /etc/strongswan/ipsec.d/private/% \; d4 L5 `/ U; ]
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/1 h* R5 _" n& n0 v, Y/ C' F
cp -r client.key.pem /etc/strongswan/ipsec.d/private/
L. Q( a6 ~, s" l o把 CA 证书(ca.cert.pem)、客户端证书(client.cert.pem)和 .p12 证书(client.cert.p12)用 FTP 复制出来给客户端用
1 n7 i; c5 }% x0 q9 u
) d% x. I1 M/ A' M1 b配置 vpn( E" h" A! u3 V
& E) O: ?/ r) [; C, f先修改主配置/ E3 ^0 R6 ?4 V6 l* L
4 ?; S( I2 V2 D9 V) {% w
官方文档
/ z1 B: s5 q9 x- q
7 O( Y/ j3 x$ z* U; V4 N- l1$ r% x1 H% W9 c
nano /etc/strongswan/ipsec.conf+ a2 k2 b3 U* z+ ^' u) ~! @$ w
下面是一些常用的设置说明* f: h, p4 W) F' F
$ p0 @* B. X" n$ W
1& j; \7 o. K4 u, {# o3 A& R: B
2
1 d( h4 M+ p! x7 i( T+ \3$ Z, j. _& h8 ~# S
4 g' X9 \$ C% [% w! f9 S! k
5
) @1 P# x# |" H: Y5 I9 }; J: H1 ^6+ F' N- j, g+ I& l& W
7
/ u8 F. X/ o( s6 p! U8
2 Z: F2 z: Z* q( b# [" F5 Z9" \8 }/ x, `8 M2 S
10
2 x1 H# b: e$ z( M113 V8 w) i& c7 O, {3 d5 P
12& z6 [+ S# d, X* K; q; d7 ~
13
& E( m& v/ k0 B* B! t$ d140 D0 v) D- Q7 L7 ^, `" L3 h
15
+ g/ `" E3 A+ i+ _$ t& ~16( Y: D: P- M- x. ]
17% Y r+ o9 ^/ k: m7 f% Y
18
3 t" G8 A3 N4 o19
* p( h: F+ _5 [, \9 w5 B* l% ?20
+ b) d! u1 N" ]4 a1 O3 v V21
% E' H% V: w- ~ o9 w227 C: o# E9 i) ]0 `/ A# Y6 K& F
23
_6 k# x, ?% R7 ]* Y# H7 l( ^9 d* c24& x6 s; E4 d3 X) c* _' \
25
* [0 l+ s* N9 p4 i3 Q6 R26
e/ c! j' D2 _& d27: |: e- [1 L8 d6 |" g$ q, c
28) S- D; N6 T# I& l; h8 ^. l
29% f" q) g& l* e! j5 `5 }) d
301 u% j' x% }8 h1 Y
31* c0 x6 [7 b* ^- z5 T
32
0 l$ s" g! E6 \& o$ a6 |+ U" |33
; Z K6 P& }; |1 Y" U34
/ c9 c1 o& ?+ x# N8 n+ e5 V0 R* X359 N6 k$ a$ g/ R1 K
360 T% |% G7 l% x2 Y3 e. {
37, ]" y9 L& y4 p6 m7 {/ ^
38" z% J. R. z: ]! N% z: J3 G0 x) c
39
9 N/ Q, i& b% [1 _* S/ i40
! [: A! P9 G F) M41) p- h {: q" \3 ~& F( z) Q
428 G+ ]$ r2 j8 M. B. ~" i$ o6 ]/ ^7 r
43
4 J M f' O1 }' \9 X$ \" U! ]$ X) P: S44# h m# w; ^" _# M6 J
459 c. V# `" [ \$ ^0 [0 h6 H
46
9 z5 c; i; l+ C; _6 f& Y0 e47# V6 ^4 u' {; G/ e- s
48& G1 R/ Y) o$ r* y
49
' y( m) m9 r' f: t50
' P& E3 }; u$ x5 W1 m% F# N6 I51
5 ]% D! L& l8 O5 }52
* K! [. x1 Z0 D R53
) |2 `$ Q2 s7 i( q, `' g54
6 S# ]" V5 {' ~) F2 E+ u55
$ J9 M' o1 M y5 U56
) Z# y4 b/ u" ]57
2 b' m b% r+ ]; C7 |$ X# C7 q58, M+ h- y |9 o% q# O/ S9 }
59; e7 ^: L/ Q( M3 x* M, C2 m5 X
605 r* h* b% A2 d& j3 Y
611 w g' i! _8 B6 d$ w% O5 e; d% @
62
7 |) _$ f) c1 A& P# C63
# v6 h) U4 O8 w8 Q8 A: ?7 E648 ?" I5 ~" C0 d8 S
65
+ y# [! j' g5 c66
; {) M7 x' p1 L. `# Y676 h) V, a" I8 B' m; ?$ f! T ]
68; {; ?1 @) Y7 x3 T5 ~2 ]+ p9 p
690 u* J \) }0 v. [" W
70
6 Z5 e- x$ C3 @: v9 e" D71" k3 A) ]2 k( L3 N. r
721 r$ f1 q# }. s C$ c3 j9 l6 H
73 S/ W$ W( F9 `6 E: ~; Y8 W( g @
74
; z' M. T, r% \75
& {/ A, f: G+ X9 Y+ @76
: \1 P, [, j1 S& }, W77
" s& I$ {& O; S& ~1 t78: ]6 h2 b9 i( S* n9 ~; L- y
79
& n& h& Z, [' V- |9 A$ O( |80
* }& f* |5 b$ H' L, e81
- U) C v% z, V v k82
0 a3 Z' u4 E3 {: ^0 {3 h833 g7 C G& s5 n" B# t
847 z4 c- N5 |/ y4 ]
85
" B$ k* e8 [) O5 a+ k. |86
, j0 e$ m" I2 w6 z9 k6 {- k87
: K! w0 l0 Y# O3 ?) ~7 s88
% B! ?' ^( A, [8 Y+ s89
$ Q# Q. T5 p/ J. h90, V% h) A! J2 E; v1 Z# s
913 m4 N" D5 D6 u
92; t. v+ H# W# t& I; H. N! n
93
6 ]2 l4 E# z2 }+ C: [' ~% [94
0 B: `. y% z* o8 o" X0 M95: w H" y+ D5 K" U
96
. k6 e3 F) T) Y4 \97# C& R% _) Q4 v+ W9 c0 h
98* \! B- U5 R9 X8 m5 u0 H
99( S7 j9 |. z, I7 X! h
100' S e- D7 B* l) h
101
. D7 U+ @. M/ f Y- f102/ O& t7 d9 i# @/ I
103
7 C' Z) ]3 l$ } r( s% f# B104
) b" F0 t n6 O" B0 H1057 z3 s6 [0 G, q6 T" i5 O
106) |* {" [1 W8 Z' x5 z0 G
107# d9 H1 Z" J: G
108# P& c# U/ d" R( r: M/ l" }
1092 ^3 C0 D1 R8 u! d
110
/ G( s3 U2 c, K7 [111
5 t/ b9 N+ [% W1 b0 Lconfig setup; B ?. n5 X4 ~/ K4 `, p) t
$ h3 W0 e0 @5 u+ b
#是否缓存证书吊销列表
+ k4 A2 K/ @1 V' I #<em>cachecrls = yes</em>7 A; g, O- N% J- o3 B- d; ]6 o0 C
4 M+ b9 I, V; I9 y7 ^; B #是否严格执行证书吊销规则/ ^$ c6 S4 t. [( i+ [* S
# strictcrlpolicy=yes
8 k0 i; K9 h4 z- e( v8 I6 q! k ' o9 O0 ^& z: g7 {/ l% p
#如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.
$ d. _+ G) S) z5 Z D6 Z uniqueids=no) y, F$ b0 x/ ]/ y6 W
! J4 S, Z' I0 h5 `- p; S
n6 v/ X& v6 f. {2 C#配置根证书, 如果不使用证书吊销列表, 可以不用这段. 命名为 %default 所有配置节都会继承它
9 t, z/ [' ~ y2 ]: j. g- d2 T0 q#ca %default
; @# R5 g/ b9 A! K) k / J% f6 Y5 P; r8 t
#证书吊销列表url,可以是 LDAP, http, 或文件路径0 ^; o* ^) e: x- `& u
#crluri = <uri>9 D$ k# q1 Q5 T. A5 e
! G% S$ T; {$ ^( B
8 Y2 _8 q7 i! n9 G5 y
#定义连接项, 命名为 %default 所有连接都会继承它( Z0 I5 C2 u6 G( u2 M
conn %default
3 y& U( ~& {, ~& X/ }0 k1 ]0 y & i( n9 x2 [( [* P" O. T
#是否启用压缩, yes 表示如果支持压缩会启用.! E3 p* G& y( J( L. E
compress = yes3 Q4 q7 E( g) V
7 ]1 B5 h4 u# R/ j1 M, `* A #当意外断开后尝试的操作, hold, 保持并重连直到超时.
2 D& m4 ^5 f/ k5 h7 G7 |+ ]( n, s. n dpdaction = hold
* T7 ^/ X- \+ I; W# ^
% B( A! E5 v P% E #意外断开后尝试重连时长
* ^3 |# Z% u, f dpddelay = 30s
4 T) P5 ] B% U
9 j6 E( I4 Y6 k* C5 A #意外断开后超时时长, 只对 IKEv1 起作用% b5 V3 x! k, C% Q
dpdtimeout = 60s
. J9 M- P; g4 o& k( Y
8 R) i5 X0 U& {0 i, t #闲置时长,超过后断开连接./ g4 y. c [, |- N& ?
inactivity = 300s! t% j0 ^+ V3 s3 o# Y) V2 U/ u2 w
9 F" b8 c0 o" z' f$ I #数据传输协议加密算法列表# ]- o) p) \1 m- b0 b8 ~9 F
esp = aes256-sha256,aes256-sha1,3des-sha1!3 x: s8 o2 _/ \2 J# W$ R
7 z* ~* T* ^' e7 T3 y
#密钥交换协议加密算法列表
: s" u5 R" [2 o$ U' k2 F6 X" l ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!% |( _4 @& x' ]' G6 z
+ \8 A. j: L. M; a #默认的密钥交换算法, ike 为自动, 优先使用 IKEv2
' z8 C# b" [0 @ keyexchange = ike/ E( k0 Z% V4 e4 ~$ ~$ M0 M
3 V+ x3 c9 t% @; n
#服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取., v7 b, L/ [5 C
left = %any
% v; J) q; |' C2 q' ~- [ #客户端ip, 同上- T$ \) t4 n p' J6 p. i$ P" j$ A$ p N
right = %any
& A& ^3 a# o- s+ O5 A& `) I; q3 ?+ x % |7 F+ _4 W0 ?& _
#指定服务端与客户端的dns, 多个用","分隔
: f# h7 \1 f4 }, _4 d6 h" ? leftdns = 8.8.8.8,8.8.4.4
/ s, n& `" ^* ?: D4 V8 L rightdns = 8.8.8.8,8.8.4.41 u' K! @' a# V3 o1 p
. Z- w2 t( w2 n! ?9 j9 W% e #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500
& [1 V. P3 I5 u8 S #leftikeport = <port>2 W/ m% D2 w# j) g1 G) ?6 X
4 f. R" o$ ^, ?' N% m' D #服务器端虚拟ip地址) A4 Y |0 N; Q3 L/ o
#leftsourceip = %config
, S" a: x/ s% q #客户端虚拟ip段 C5 `) M6 l: d4 Z
rightsourceip = 10.0.0.0/24
0 J" l1 P# t) C# q1 n& M ~ ! \4 c, K6 v' t/ u" \
#服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字6 F1 i, f, n. V. B S: W
leftsubnet = 0.0.0.0/0' G& T* y# l3 {8 V. `3 @, L
#rightsubnet = <ip subnet>[[<proto/port>]][,...] m1 L/ g" N ^' ]
6 [& j! g& ]; `7 s( r& d$ ^
conn IKEv2-BASE4 O j7 N/ o, _& a1 F( t5 v
2 K! J8 x+ L- Z, m8 g #服务器端根证书DN名称
8 b: N, C8 ^3 E$ c3 t% O leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"6 f! ~. z) i( @1 w
6 ~$ g4 i N8 |2 z/ d% l1 l
#服务器证书, 可以是 PEM 或 DER 格式( g( T0 ` ~- b( q
leftcert = server.cert.pem- c, W& C3 C V/ | d# j
#不指定客户端证书路径
6 |3 A1 V/ @$ ]) j+ i #rightcert = <path>
: a6 ^( Q3 a! Y
8 o* P8 ~% y; A+ g #指定服务器证书的公钥
* p, }; g1 e- ^) K) L leftsigkey = server.pub.pem' S, v3 R7 E% w. `8 G
#rightsigkey = <raw public key> | <path to public key>) j: K4 l6 c& j+ m
" w. p2 ?- U T5 K& I #是否发送服务器证书到客户端2 S' \4 t' Q' v( `$ q' j G
leftsendcert = always
: ~& u* M4 }# `9 r #客户端不发送证书 L O- n0 m( M/ A @8 u! Q; I
rightsendcert = never7 h5 t% q+ A2 h3 s6 Z* J
7 R& s7 `, N" i #服务端认证方法,使用证书
7 A t% \$ Z. I! n5 x' A leftauth = pubkey
5 E6 G, e5 G6 Q+ D$ w2 O #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用# X* ^; i9 D6 _% k- ~
rightauth = eap-mschapv2
3 h' l1 p: r0 E, S " P, w" G$ s+ m# Z1 {4 J4 [" T
#服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行." p) W2 Y' P7 W
leftid = vpn.itnmg.net: `0 n% U% d) M; }# f
#客户端id, 任意0 }) A5 ^4 P* F+ M
rightid = %any, Q( G5 _* z' ?8 P
) W) d4 E4 i0 g" V( m% J0 G#ios, mac os, win7+, linux" [+ ^7 {0 I- ~& e
conn IKEv2-EAP$ e# Q$ x5 E1 D+ l
also=IKEv2-BASE
/ b& J3 k2 J- }6 p* _+ |" ^
7 C+ ?% [ g* x% S/ W9 }6 U8 q #指定客户端eap id+ b6 E- J h( t3 N- Q7 E! c5 K
eap_identity = %any/ Q7 w- L' E' ]9 p5 O, x" w
" O7 @+ _6 H) a
#不自动重置密钥
; C4 _+ \' f L9 z/ E rekey = no; f" T+ s& r6 j
6 t* v5 T; r- |1 ~
#开启IKE 消息分片
+ g5 @( ]# e6 e$ G& Y9 l( q fragmentation = yes
' b# J0 `) H4 M/ F6 T( W+ Q 5 p9 P) }* }9 V* |8 ?5 A& H7 `
#当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.1 E6 u% t3 Z" B9 ?% B" b) P9 \7 p
auto = add# a @+ c1 M: _5 L a
我的设置项9 z% p1 w" K- D
5 [3 @/ i/ f: y' w
1! i- ]7 u; _4 m0 m+ q q: G" J
2/ F& y o$ h( K0 `
3
7 c! B( y' T g9 A1 s+ \( i1 U42 r7 S7 a1 ]- v2 K) z3 {4 @
5" c8 b7 p8 d" I2 }
6
+ v7 n, Y: t: Y7 h7
) _ R3 V, D' ^8% |& [5 ^7 \) y# C" `$ W* x
9
6 M8 w9 c) x* h10
" e$ g2 o; K6 C \! L& C11. l; C3 y% a+ W9 f) R
124 _9 \ R( k, u) i$ E9 N* F8 s
137 N, Q3 i! B `" W7 T4 t$ [
149 H+ } e% L. u* M! z0 q& g
15 `/ I9 R; a: W8 p6 p
167 M) L& H9 M/ C2 Y3 b3 ?$ v3 T3 f
17
5 E, c. b: k. \" K) r- |( l* s! R. h18
- w, W, _% e: d% ~) c) K: U19/ G5 U2 \. _) Z5 A0 |0 z% s0 i
20
# b4 T% Z7 q1 ^1 [9 t" \+ N210 g7 O& C) G# S' B5 ]: Z
22
- S2 e" U$ G3 ^23
8 t0 W4 g9 B7 \) \24" L0 I! r$ b6 o6 v+ E
25
& W2 X t# _; h- x7 I26
0 f0 j9 k6 l1 V0 G. T% n8 `3 @+ }27
. P1 Z8 @) B" E28
5 k0 e5 b! ^! R& j29
' ]; x' b ^. r [1 a1 @config setup
1 T! A$ N. z4 j; h# D uniqueids=no
0 \9 T: V K i/ ?0 E1 V 1 w5 h# [- n4 S( ?4 g ]* z
conn %default6 d2 O# ^/ M8 \, Q: X! U
compress = yes
8 j1 P: n7 P2 b, ^. P2 w esp = aes256-sha256,aes256-sha1,3des-sha1!* X( t4 u( Y+ o( Z6 w
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!
( W x8 ^1 M& o& k/ \8 v keyexchange = ike
. @. M# R; G0 S( N/ J/ G keyingtries = 10 t/ P1 B$ A) T z0 x
leftdns = 8.8.8.8,8.8.4.4
8 \% h9 U) C" X* |0 \ rightdns = 8.8.8.8,8.8.4.4
4 K" Y2 s( ~9 g# z% @9 Z
1 I! z( |% Y h, @conn ikev2-eap
* @$ K/ m3 u" }8 a7 G leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"/ I( n( i2 `$ k: n0 G
leftcert = server.cert.pem. [9 R, i; W* }. e* q+ [
leftsendcert = always( i4 S" ^8 s9 h1 Q0 t* `3 I
rightsendcert = never& Q+ H, _, `2 D. U6 o, G' [" a5 j
leftid = @vpn.itnmg.net' q5 C1 U2 V; R1 @. h' |; p, E7 C, [
left = %any
' u, b( }0 P2 z4 n( K) p) k right = %any
: l' T7 e# `$ B+ f/ j. \$ v leftauth = pubkey2 L1 p+ ?0 q% o: e
rightauth = eap-mschapv24 u5 p8 Y. J* x! ~) T: x& K
leftfirewall = yes
1 F' e8 ]$ Q% |) \+ ]' d$ A! J+ I& i leftsubnet = 0.0.0.0/0
9 m- O# n y8 X9 _ rightsourceip = 10.1.0.0/168 l3 T( h/ L' I; p6 C
fragmentation = yes
/ [* ^; o! o* ~: _1 S6 V rekey = no5 x( _9 s% g. N! ^$ f& f
eap_identity=%any
/ R, H0 b1 \$ U3 j, y auto = add
) y6 _+ t8 k1 r: p* y" C- s
* K' v1 z/ F$ ~: d7 j6 `9 z- C0 ^
- V, ~+ u. {( U& z2 ?修改 dns 配置& ?* V/ p5 G6 V) [9 [6 Q
" p; h. s7 I8 ^. T" E4 Rv5.1.2 之后, 所有插件配置都分散在 /etc/strongswan/strongswan.d/ 目录中.2 R3 Y' N. Q# @% C+ D9 l+ q4 e
) X, [2 k) |' ?; j8 M1
3 s) w+ p3 F1 t2 B4 z. Pnano /etc/strongswan/strongswan.d/charon.conf$ n( V' a0 d4 I" Z/ Y% H
修改如下
! `' Y2 l1 |& y6 k. u J3 d1 L6 ~' e8 V
1% b! Z8 F4 f9 b$ C' w
22 ^' o6 ]6 C# [9 N. ?* |
3
: p' S( B1 J. r4 z4
\& l. _5 b* Y5 P7 b7 @52 j6 o' L( A U0 H( I: ]$ J
6
7 k) D6 M3 A; v/ X+ N+ _' n6 u71 @* H1 n. u+ _8 O- y
8
. [( y3 q7 d( i6 n$ \- G- s2 G9; \8 j: x; y! M; x4 r2 q
104 S; w, i3 ^7 l! e2 a
11$ m6 J. ]7 ^/ b; E
12
1 R. p) M2 |% S1 w* v13
+ r9 L$ l" }/ s) U7 h6 P$ ?6 i14. z- j) h/ |9 [: P( t9 }
151 v3 T/ r/ q6 E W- j# r/ t6 C- j
16
9 D Z3 X+ W% s# S! u \17
/ z2 h# a3 q4 A0 _3 L18: W3 @- t5 o: }, {3 E# _
199 q! Q4 A" j% x: G7 o- E' n2 R% W/ s9 [( n
20& ?$ V4 c7 M4 n: K
215 o! d; p. f5 M ~. E1 G
22
2 b+ {; R6 s5 b& t/ Z% W/ F. f23! b. x, K5 u3 b9 a1 w
charon {
: _: {4 x% A. ~' R duplicheck.enable = no #同时连接多个设备,把冗余检查关闭.. L* m3 W; ?. l) s1 w; n1 K
3 Q/ t" h: c/ Y; D # windows 公用 dns
) ~6 @8 D' j5 @ \& b& c" ` dns1 = 8.8.8.8
8 t6 N" S: {9 q+ k/ P dns2 = 8.8.4.4+ P6 v8 j# A2 E0 B; w' s; W
# B' e$ U5 N! k3 b8 ~3 |
#以下是日志输出, 生产环境请关闭.9 T: Z. y! E( a2 v) ~* F7 V# a# n
filelog {# R* l1 ?- B9 r- T
/var/log/charon.log {
6 b* w- D/ S' p7 e# y # add a timestamp prefix' p* Y6 O; O( L1 `$ l0 ~8 C
time_format = %b %e %T
* o* D( W J, ]# |( K: X' I # prepend connection name, simplifies grepping3 e+ \4 u' A6 h$ `
ike_name = yes
& m i, f; {+ ^: V& e8 F# S # overwrite existing files9 X( d5 Z+ ^/ D& F j
append = no
9 O, R& {5 y" H+ ?/ u # increase default loglevel for all daemon subsystems
( p0 K# s% G% V! y4 A default = 1
1 D+ b0 G/ _; v5 U% l # flush each line to disk9 f$ `; }2 o/ \4 ?
flush_line = yes1 q: E9 X) Z! |" J7 I
}' V1 T) Z) j) b. |- }
}
! Y/ _! x% q4 z" x& L7 \1 O3 M}1 w" i. L0 w; T4 y9 w* s
配置验证方式的用户名与密码
8 d* x# U4 V2 X0 H
* q4 u* ]( x. \; H; l! ]14 }$ z/ S5 Q* A) l3 \% N: W
nano /etc/strongswan/ipsec.secrets
4 C# M9 {4 j+ P+ x3 H7 L, z- b下面添加用户
( `4 P4 D! a. w7 c- u1 i' n, O! r' n/ y. N$ l0 \
1- Y8 U) v' f6 |! w
2- k L) y1 b- H
3
# _. O' ^7 h9 l" b' ^8 C0 {9 m46 m& O' j: h7 m; v A; t
53 s! c I! y7 {1 e1 g
6! C9 L q; [. }7 W. D t- g
7
0 @2 }% F5 V: P3 x N$ }+ U$ Z8
) n) K: O+ W+ ?0 D+ ^9, ]/ H, W) F- d* U4 ]6 ~
10; l& V# t0 Y9 A1 M! h$ P
11
8 i$ d. m7 C [$ |+ W12
( K& r& w; S6 {13) K$ _# k8 P% x o3 G
14/ N, v. U7 h9 P. e- _, c( g
#使用证书验证时的服务器端私钥
: H; b6 C R& ]4 o4 a9 h#格式 : RSA <private key file> [ <passphrase> | %prompt ]
& q3 }. ^4 }, M' H9 e( l, S, d' w$ c. P: RSA server.key.pem6 f5 x1 D" M z, M6 g
$ r, {' {" x, ]& p
#使用预设加密密钥, 越长越好5 O* K f2 f4 C [7 k" T6 T; F
#格式 [ <id selectors> ] : PSK <secret>
$ I, U2 g+ Z; M& j# D5 c%any : PSK "预设加密密钥"
$ u. G# \. t6 ]2 n/ T8 t * W" T8 { Z( T$ k) J9 ?# B' g I
#EAP 方式, 格式同 psk 相同* h& p; K4 I8 q- ?$ s4 `' [2 o
用户名 : EAP "密码"4 \9 }$ N9 e: ^
" m) b4 G' \' z
#XAUTH 方式, 只适用于 IKEv1! Y& U$ o0 a+ `+ p" [ q: C
#格式 [ <servername> ] <username> : XAUTH "<password>"
) M' n& }2 g9 W用户名 : XAUTH "密码"
8 g* a! _! f, m, v% m# L开启内核转发
$ o( T; a4 o3 M4 @7 C( I, W/ j" G& Q9 {6 G0 a6 h
1
2 l, b! x# x5 M) y% U# [9 J( Gnano /etc/sysctl.conf% X- Y, q+ D( ~/ ^0 c$ V( k" R1 X
写入以下配置0 K: f; N1 F# s" Z4 |5 u
+ g5 [( [5 O, a6 o; {" [$ P% e0 c
1
) I/ |) Q- ~3 j; h; P0 T! R7 e2
; Q2 L! `( d# _. K" J' q" H* c3: F' U, u) n# P) X# L
# VPN0 t9 F; t9 y( a5 `! K, J
net.ipv4.ip_forward = 1, ?$ w/ e( Y! s0 \6 s
net.ipv6.conf.all.forwarding=1. l9 z# W( K9 M/ A
保存退出, 执行下面命令.
& n1 o/ w9 @8 x2 `8 H. h
9 S4 R, y1 i1 S8 b* j1
3 m) ~% z. }! c* z3 x9 z/ Lsysctl -p/ [4 M4 Z: ]8 ]0 n: \4 I0 j" F
; m' o! k/ f1 f g4 s6 q
- {5 v% L0 F+ S3 h& ?配置防火墙
8 |/ j% `' L! I1 D& y
+ e; _6 ?8 h6 m. K2 ^3 C# ~iptables 配置方法2 h1 D: g+ L4 x; A8 ^- j4 P
: D) E B+ {: E2 }! H
将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.
! a( S/ ~ s3 d p
1 e$ q1 m6 c! i) P* h& b1
% e q& M4 w& c2 A27 k h* U1 s) @! M2 R0 E
3
8 _4 Q+ N1 y/ L4
: m9 l9 o. \- T5
' s- R) ] R. ]3 Q% e, u2 R1 N( l6
4 S! Y; ^; |; q7
/ o% m5 B$ u1 F9 O4 a8) V8 A" a7 b2 \2 a* h
9
4 r* R4 d% q/ s. O) e" F10
+ ~5 {" h1 h: M6 {3 P1 @' S11
# d: g ~# u2 h5 [$ b) c12
" u1 @+ @+ a4 t* I138 l1 v. u8 z2 ?5 s* \; t4 s8 j1 ^
148 J& F* ~) d+ K& z4 u
15# T) a0 U7 Q9 W+ o+ k0 ^4 T1 B
16
% A0 z( w o" n8 g+ h#开放端口
6 }/ l" t) Z4 K" siptables -A INPUT -p udp --dport 500 -j ACCEPT; J: P/ b& f/ I. |/ S
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
( k h! p) M7 I p
$ B3 l# f0 Y+ D! c" g5 K7 H4 i#启用ip伪装8 z2 @; X$ X; H
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
" O6 X! r' r5 W/ ^) y* giptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
1 z+ V9 e" h* ]0 S
# w1 d$ i, I2 v% n+ L* h7 c6 }3 F6 g# J#添加转发0 W% H4 O: W: w l+ x. o
iptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT1 w3 c! l; F' [- [* w" F+ r
) ?* J2 Z- e+ R2 G. G' @: }$ z4 O" M; V#保存规则. `# j4 h' r# L& a
service iptables save, d+ x0 O. ~$ d( ~( ?& m, D4 i
1 q j% c7 }, C$ {- S* m#重启服务; l' Z3 T& s E8 _3 w9 E0 r8 @# i( g
systemctl restart iptables
" `/ W3 M ~7 l, H% ?# X* r如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.
4 ]8 c& I$ f' U: A, K8 V2 e* T9 X1 R; K
1
3 \% x9 H3 R$ h" |- D3 t1 I$ |nano /etc/sysconfig/iptables' }. Z0 k$ i7 c
将下面的规则部分贴进去, 不要整个复制粘贴, 根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.
: Y X3 i9 v; _) d1 q8 l; W7 f/ L2 Z3 J5 |( O$ D
1
4 A! R5 z+ S: d! M5 e2& L& V/ d1 B3 ~% S. k0 r
3
7 `4 T, D0 U/ g4
2 H; B( l' E9 N. ^0 L( f5
Q* L) `) t, j( v% ?0 V6
' Y4 O- o* _9 w8 N4 p/ }7
/ N! K0 f' s3 H: \( z: p n1 J1 j5 |8
0 D4 _; ?8 ~4 P+ k: K9
* e( t4 r- p# `/ o108 {( Q% ?" _# E* u% R
11* Z3 {! S& k0 ?- \- H+ ?5 j
12# M+ [& u' z- l/ k! @+ m, R/ C
13
& T$ |3 q( F# X3 W# D14! [0 }4 Z7 i I, Y
15
8 w) \: u2 W! B/ {" n2 H16
3 S6 `- j% ~6 t( h: K17* s" r: n* H r: f5 x1 c7 G! {' s3 t
18
5 b/ \7 ~- O/ e5 S" D2 c190 C3 q& n: o* I7 [5 p
20
- t/ d& c2 Y: V21
% z( d; H- |. o/ d8 I22% S3 Q+ E* K% }, g- e* T
*nat
8 l6 i: L1 n+ m. @:PREROUTING ACCEPT [0:0]" Z8 R% l5 l2 }( Z) S1 }* i$ y
:INPUT ACCEPT [0:0]+ ~( ?$ ]7 W g4 s( p
:OUTPUT ACCEPT [0:0]" Q7 x1 s- V8 z
:POSTROUTING ACCEPT [0:0]7 ~5 D2 y# O1 _% m# m6 `7 c8 }7 t
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
6 ^" V1 L+ M. @( j4 l- d, H0 B-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
9 V9 _% _% T% K7 l5 i2 b' j4 fCOMMIT- ~+ A7 l1 d& q: E: a# h
*filter7 [+ S* v* V/ }1 S0 R, A: g8 ]/ T6 s
:INPUT DROP [0:0]- Y J. ? u( _' W' J, b2 r
:FORWARD DROP [0:0]
& V) N0 ~ t, S4 E:OUTPUT ACCEPT [0:0]
, J; s0 R; j6 |" f5 Y r* v9 M-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT3 B( Y" x7 i: \4 w# D. }" i# ]
-A INPUT -p icmp -j ACCEPT
- i; b! G* S" p! S/ j# f-A INPUT -i lo -j ACCEPT
) Y* Y# p6 M g ]% S. y( l* G-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
: h) I7 }$ Y6 f# [: y" m-A INPUT -p udp -m udp --dport 500 -j ACCEPT6 f2 q% ^! w" F2 E+ d/ ]( l
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
! T# p9 J* f: {( D; J/ f. x-A INPUT -j REJECT --reject-with icmp-host-prohibited1 H& K7 _+ K" P. r" i+ ^
-A FORWARD -s 10.1.0.0/16 -j ACCEPT
: A! T$ B; ?, K3 l- ~! m6 x; q% [% N+ Q-A FORWARD -j REJECT --reject-with icmp-host-prohibited; H- X0 Y( q8 U. e4 a! N! Q
COMMIT e/ u& q p; u7 C' U6 S
保存退出, 重启 iptables 使之生效.
& l. s. m& R. V* ]/ {! c
+ c2 B9 k+ H9 V3 y5 ^' b; Q, P' A0 q1 F: O" ~" f, a! U$ [: M- q) N3 G
systemctl restart iptables% R1 p Y' J0 n3 N7 D
# C4 w3 `) h9 {8 J" Y
, B L2 r3 c, ]3 }$ S# F9 S以下是 firewallD 的配置方法, 使用 iptables 的可以忽略.! b! f& |8 x7 p! B" ]
4 k* H; l- Q v8 H! }firewalld 介绍请看 <<CentOS 7 firewalld 动态防火墙介绍>>" {% r( b) m5 r2 S1 o7 [3 {" d" D& a
: z% h7 v0 I: m- ]# j0 O: q
首先将公网网卡添加到当前区域中
& H6 x X4 K) B8 `4 ]0 l) `7 V* C- S5 M3 m4 R+ q
1
, C: \6 O5 F# V# j2; r, @9 G# x6 T) P
#查看所有网卡信息, 找出公网网卡/ ]1 V; ]/ u& T- r$ u3 E k
ip addr
$ a K. y& _+ R' Z4 v$ Y编辑网卡配置
; I& L i" X# y V3 ]( D+ {7 I: J' X- h( ?, V1 J" h: f# ~
1
" Z u" W; R- g- G* q9 ynano /etc/sysconfig/network-scripts/ifcfg-eth0& e" G W0 d+ B: T9 t
在最末尾加上区域配置; M# ]2 S. p9 Q L# p3 S2 J
2 h9 ?) j% `( h* K+ C
1
* @: ~: _' J4 Q7 F: J |9 JZONE=public
% U8 t( ~2 _5 Y' i保存退出,重启服务
( S; d/ D; t' \. r- ~
: f% `+ [: E$ V8 i2 w" a1
7 m% w. S6 B) u+ { m23 H7 T$ D* p- F+ P) h' C
systemctl restart network, {1 h! M* k. I, K- ^$ G& ?% f/ C3 a- p
systemctl restart firewalld
$ r: q& y; O8 s/ h) b$ Y - S' z+ o6 M. ?# G: N
( _2 K9 p8 b8 A5 _3 l
然后新建一个服务5 p5 G* S0 y1 }+ }" d7 c ^7 z
* p0 Y. j0 x/ c1+ o, ~8 b6 H1 f' y
nano /etc/firewalld/services/strongswan.xml) k5 F1 w' X6 q# ?4 ]
填入以下内容
! Y% y2 n0 ?! G! N. \8 ~6 P6 J2 Z$ p+ ?7 w! P# F/ n* Q' |' B
1& k5 L$ p* o2 v$ K
2
# S' H8 [# A2 `, r8 r6 l; b3/ E9 Q" \" d$ j8 _* j5 ]; Z+ \
4 D* p* v1 |3 m2 w [' G4 X
5* m- `# C. L& t- d* R7 a
63 ]; ]4 ~& i9 m. w
<?xml version="1.0" encoding="utf-8"?>
4 u! `7 g! D6 x- t5 f0 }<service>
% L- @4 F" ]$ w8 j# Q- h+ a. k) p <short>Strongswan</short>8 m$ a3 ~& j! k0 u3 M b, n
<description>Strongswan VPN</description>7 N% q6 ~ y) L" ^# J
<port protocol="udp" port="500,4500"/>
: _4 g5 q! K- t3 f" f$ Z: R</service>
t+ p, E* I, O/ }, h0 p, E9 C保存退出- `, p/ o* O$ e, y- o! Q# h' Z; j
' S" E! O& X& n" }6 O% y Y0 K
添加服务到当前区域, 开启转发1 D5 C, b- ]9 y6 t* ?9 o* m9 Z* @0 k
, `* R4 o5 g2 O0 z3 @0 w
1
0 k7 g9 \$ [) x: q, K) N26 I A( n% i; V" p, M" x
3
! Y) I8 ^( R" U5 d8 u- k7 `9 y$ t4. X4 N: F% c+ h) M: @" s$ x" w
5
0 H" [; X# d+ t6
. R2 a" n5 Q4 ]7 t" g& a7* }3 D% f" u) Y
8! l! [5 `1 d' b$ c1 K# P. O
9' {, p. C' J; c; }# [; ~8 r
10 N5 L. F" A% {8 @7 H8 v% r5 W ?
11
; v* ` v. h' m" `* h12% K5 e, ]/ j, s, q
13
$ r4 i0 c* v7 m* {# q8 _6 V14$ J- p3 c) g# m/ `
#以下命令没有指定 --zone 参数, 都是针对默认区域 public, V6 Q9 N" p# t$ N0 y
#为区域添加服务
3 U) s( g9 F' B2 S' y! gfirewall-cmd --permanen --add-service=strongswan
/ |6 d* \ g* _: ?* F' x
. f4 k; I9 I7 r6 z3 k7 c. h
( K$ }1 Z, }; s8 E8 S#启用ip伪装 m# T; E* ~. z$ f$ v2 I$ U
firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" masquerade'
+ Q6 Q2 t" a D ' O9 ?; Z3 m7 s' Y4 n
#添加 nat 转发
2 b0 D# f8 ?0 r: O: G- `! lfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="4500" protocol="udp" to-port="4500"'
2 v4 f: P7 v# ?/ n) N9 Jfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="500" protocol="udp" to-port="500"'
; d5 K. i' M5 h4 O 3 H4 s# a+ K, Z
#重新加载防火墙配置
1 [5 T0 s, G+ `0 U9 I* zfirewall-cmd --reload
6 H( U$ t. N, J; d. [
( V# x- C) L* k
! ?; \0 n' @- s( i/ Z除了用 firewall-cmd 命令外, 还可以换种方法添加上面的规则.
- Q( ?% c; e8 r$ t4 A) W3 o: S
* v# T8 Z( `; A( l2 R1 h1
; W- A, h) Q; P5 }& i8 D2 D9 G9 O2 o; x7 d& O. W" W
#编辑当前区域的xml配置文件
3 O w7 J3 K$ M6 H6 _7 qnano /etc/firewalld/zones/public.xml* q3 P" Y3 y% u$ ]
改成如下内容, 我这里只开放了 ssh 和 vpn 端口, 其他内容根据各自的情况修改.
. J i, L! j4 b' A5 o* C& V+ i' P* f2 |, q0 C5 S q
1. d6 f- J8 A) @7 r9 F, C
2
1 ]) G% o! [% A. {7 {3
) }- u: i* E5 N5 E' i8 ~7 G4 M4
8 i8 f6 q" j5 N/ L. r5
% `1 H; B' }, |' Q6) l& O0 w' \. C( q1 l! [, U3 |
7
* `4 B. q! M/ B" R- A& p8
& V" X$ D. a: v- V, i2 W% b% V* y94 s% f0 `0 a3 @, X# b/ t7 X9 M" v: A
10. O& [- c% h% w
11
' B* {8 _7 N L$ i12
" D+ \& ]! A3 z: l13
* Y4 c6 V/ u% h F4 V C14
% S4 I9 Q& U% L/ l; F9 D0 T6 ~) J" M150 j2 [8 Z0 s+ l9 E' n) s9 J6 H# P
16
# \, m. m3 [ x4 K$ p$ v) E/ c; l171 j! a) \( L/ N4 a5 `! D
18. t: [' }6 n' `4 r% G
19
0 x8 x5 w* k3 T( i<?xml version="1.0" encoding="utf-8"?>$ @$ V+ K) D* {
<zone>
8 Y. l; Q j0 s: y8 W <short>Public</short>
0 D) w. D8 m; G2 R& U9 k5 \# 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>" h1 G3 h5 j) o9 H& C1 }7 r/ Q0 ]
<service name="strongswan"/>
9 F9 _* n9 s8 t, Y <service name="ssh"/>
8 N( w$ R4 ?8 D <rule family="ipv4">
2 \; s$ }) j* q <source address="10.1.0.0/16"/>, p) d1 @* o M; F% m' }' S& r5 t
<forward-port to-port="4500" protocol="udp" port="4500"/>
( w% U8 b( _3 M, q; V) y# j" d% U </rule>( D% M q0 i- z
<rule family="ipv4">
/ o, @7 f) E! ^' }6 Z" i( G <source address="10.1.0.0/16"/>
' ]" t# }7 e: A+ H, n* X <forward-port to-port="500" protocol="udp" port="500"/>4 O; b, i& v0 S% c% y" E* r0 C; x4 Z
</rule>, C$ C- c! V5 z; t
<rule family="ipv4">
7 r+ l( e! C; j) U/ e. p A/ m( A/ K <source address="10.1.0.0/16"/>
; o e% _% d4 m8 m8 w <masquerade/>
6 e4 z! B T/ i" t# V6 B f2 @9 G </rule>
8 ]+ K" k' @' c |</zone>
3 `+ B1 A2 q9 I+ a19 J. ~3 R0 z0 K* K
2
: u" p) ]$ n! J W) L, M& G#重新加载防火墙配置
; p4 a$ A: t6 L: U% Tfirewall-cmd --reload3 ~6 O9 x! O" y$ P& V2 P
7 O/ y* |4 o* W7 H; S- f# y3 Q( _/ h' t" Q. _
配置完防火墙后重启 strongswan 服务8 o" U8 Q( \/ H5 J
! ?! M; Z2 \5 D1 }& b) P
1: P2 a; q' c8 @0 ]7 U) Y3 m3 K/ G8 C
2
/ b% s6 m/ a' z( z# E$ C9 jstrongswan stop #使用strongswan 自身的命令停止服务0 u2 _8 W2 @. v# R" ?* w
systemctl start strongswan #使用 systemctl 命令启动服务" \, B! ?. l$ u( i5 a, s
这里不使用 strongswan restart 命令的原因是, 使用这条命令后, 再用 systemctl status strongswan 命令得不到正确的运行状态.
( i3 ?- a6 x t' [" `; N" t3 Y8 `$ r+ T# n1 M# C- K
至此, 服务端配置已完成.$ h& F: G; E, `+ M9 k
* `4 i, J9 h" Q! K# X , t0 K& B+ D9 @! W
# S L8 I& L* l$ l# r i
为了学用 firewalld , 特意用了两天时间研究, 学会了才发现, firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.1 b/ ?# k6 k9 w$ r2 }
+ C6 E+ b- l% {; ]$ B# P- t5 ? b4 ?
客户端配置
. v+ N8 _- c7 u$ @/ h2 f
+ W: X2 D1 W* C' q4 } B IOS:
}( E& ]/ B6 c/ E) F+ [
/ z* `1 H7 ^4 `8 r- y* [' x9 B先导入 CA 证书( ]6 \5 B5 H9 H( P- i. j9 X
" n2 Y4 h% z$ d& |4 b
将之前创建的 ca.cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.
$ T- g; b; t% L- U) P; U5 \8 V- W9 _) j
1. 使用 IKEv2 + EAP 认证( K3 ]( |; K- L A8 S, v$ `
. g, e( f+ u9 [, [; u8 n; Y0 K6 \
找到手机上 “设置->VPN->添加配置”, 选 IKEv2
: d0 Z) {! I; Q) A8 K% r: C& o! |+ V8 R0 J
描述: 随便填
6 e6 r7 @* i" O3 X; a服务器: 填url或ip
`6 q# M R0 W' x* v+ Z9 g: J& c远程ID: ipsec.conf 中的 leftid1 L. a; m) P6 y4 }: A: ]0 m
用户鉴定: 用户名# q: D, }- t$ Y, Y% Y l( l
用户名: EAP 项用户名
/ y2 F* h1 X& K! z/ R密码: EAP 项密码
; X; l9 v+ A8 x' e2. 使用 IKEv2 + 客户端证书 认证, h) P8 p: k& Y0 \- {, k9 w4 Y
q9 u; {7 H! C/ T$ V
把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开. 导入到手机(此时需要之前设置的证书密码).
7 l# z- \4 P; D% k/ s {# q- A3 ~' ]4 j8 G0 s
找到手机上 “设置->VPN->添加配置”, 选 IKEv2
3 X. @- H! u' {# T+ R* K1 l% o5 _) P& B }
描述: 随便填
6 t2 k3 \3 B2 }! p, @服务器: 填url或ip4 w' i+ j9 t, y- O
远程ID: ipsec.conf 中的 leftid
) i: {& C3 V" K ^; |/ { o用户鉴定: 证书
, t; N: Q# \3 `" v* V8 |- O证书: 选择安装完的客户端证书2 f" K" c0 u5 U& | U& Q% a
3. 使用 IKEv2 + 预设密钥 认证
9 A' u, Y" H% `; B$ J9 q
) S7 Y1 F v1 |% M: l, P; A3 S5 E5 h8 `7 l找到手机上 “设置->VPN->添加配置”, 选 IKEv2
7 L- s \" z, F
( N: }$ J8 {8 Y! M6 y描述: 随便填
# [1 m. X. }/ ]+ q. w% s服务器: 填url或ip- y8 w, T, J0 K9 m. C; S/ p p1 a
远程ID: ipsec.conf 中的 leftid6 v/ F6 p8 K/ f. q' y
用户鉴定: 无
- ^ z" ]7 l1 J使用证书: 关
, k; ^ x; p$ D* N9 h密钥: PSK 项密钥: A/ v- V d$ ?
Windows 10- K* Z' m7 ^& @9 C3 u. k: ]
! z P0 L! o+ k% `: h/ v- C0 Q
导入证书:
; q T8 v+ f, q( Y3 V, s- o3 I
1 a' @( u2 |, V1 C将 CA 根证书 ca.cert.pem 重命名为 ca.cert.crt) {9 m4 A. H: t5 c% [
双击 ca.cert.crt 开始安装证书
" t4 ^1 v% D; }+ {( U, \' k点击安装证书& O% J- C: |& l6 h
“存储位置” 选择 “本地计算机”, 下一步/ s: E' G- G( Z
选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成.
$ F0 P1 X _1 J3 e4 G, L2 x建立连接:
7 h0 g9 d. D' S h4 s z2 |' A& ?1 I% y5 U7 e, k
“控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”1 {4 l2 o' V( G0 u
Internet 地址写服务器 IP 或 URL。6 H8 \. G( `1 w6 L5 i6 M" m) _0 P
描述随便写。9 `. f7 r8 m: _5 T
用户名密码写之前配置的 EAP 的那个。
' k; c6 q- |. p9 \" W确定
; }/ l9 v! E" N: Y6 F; r转到 控制面板网络和 Internet网络连接+ D' Z! G' t2 h' g0 t
在新建的 VPN 连接上右键属性然后切换到“安全”选项卡
) M9 h* s# t5 t/ ^; V2 m: L* _VPN 类型选 IKEv2
* V( S/ ? @" T- W数据加密选“需要加密”% K/ s9 u! v: e7 [
身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。; G# E3 N6 Q% ~7 X
再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.- J- g0 u$ A8 b. K7 r# Y
点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出.8 N% c5 _% Z' u6 q- a% s n5 N
VPN 配置完成
8 X( c* O2 W. [ O. l
% i5 z; n( q3 C' yWindows 7 导入证书略有不同 }2 ]- K2 f. j/ }. f% l
/ q6 `3 V* f8 t( [& b
开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
' |2 d/ F- P5 x2 H; w. ~「文件」-「添加/删除管理单元」,添加「证书」单元1 K. `& {$ s4 p
证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。/ J+ K8 d1 V( U. f# o% u9 }
在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。. s$ X/ y: G4 V
选择 CA 证书 ca.cert.crt 导入即可% m" U/ K/ w! R" W4 v
注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。 |
|