|
|
楼主 |
发表于 2017-9-23 10:54:40
|
显示全部楼层
这里使用的 VPS 服务器配置:1 D4 F2 K( y) x( X- H
+ _6 T( ?, }# E4 T' e. J6 B; i
CentOS 7 / 512M / 20G ssd , $5/月. 详情请看 这里
- l7 @% z( R( J+ {3 G! f2 g禁用 firewallD, 启用 iptables., S% \7 F! D: t4 i6 j; H
strongSwan 版本 5.2
' r- }! U. E" |3 E* C4 I; Yxl2tpd 版本 1.3.6
' z( X/ j9 y+ i安装 strongSwan
' p9 e# Z. y( }" A1 F' f
3 m* x9 _2 e4 N, istrongSwan 的发行版已包含在 EPEL 源中, 如果没有添加 EPEL 源, 请看 <<CentOS 7 配置 LNMP + FTP 环境>> 添加 EPEL 源.1 v+ c. _; [7 j4 w
# L* o3 `2 v) G/ U+ L; u添加完 EPEL 源后输入如下命令7 H5 i; O- @3 f, t
5 S: \( _/ d+ j3 |1 p
当前为 5.4.0 版本, 官网上最新为 5.5.0, 但是需要编译安装.
% Q5 E1 I2 N+ G8 |+ `& r9 X( B9 H. a8 S c! H6 Z+ l9 ~
1
+ O) M3 r8 Z; j$ E' ^2& c: C1 p! i: M/ V6 [. i
3
/ H& ~$ n; ` a7 T+ ]yum install strongswan
: B$ K- M0 L5 E) Y, Hsystemctl enable strongswan
9 O" g3 I: D, D! |) a8 p% f G ^: zsystemctl start strongswan# x: p3 W- L! [0 ?. ^( Y' x
生成证书
( P- {5 v, T; v' }8 r- Q- K( y) u$ q; d! t( ?3 W* H
生成 CA 根证书
^9 V8 s$ T2 H( A" w' V) y& K' w* Y- Y" ]
1. 生成一个私钥:
" Z; T# a( U" K9 f$ z# n* ? P- V$ ^9 @
15 Z. `3 v2 o# f6 b' \3 M+ M9 A
strongswan pki --gen --outform pem > ca.key.pem
$ W$ U4 U# c2 Y) j2 n* j2. 基于这个私钥自己签一个 CA 根证书:
$ C+ j" V. @$ a5 h. t. c2 ?! r) n K# y! q5 c5 S$ ?
1
+ z2 ~ Q% p9 V- Y |( n6 fstrongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem! f3 `. A! ^: k- Q
–self 表示自签证书; e$ Z# V/ | Z. i
–in 是输入的私钥 _- E7 d, A3 E+ R& @9 g6 Y; P
–dn 是判别名) n& J- a. e0 n4 A2 A
( b2 q9 h" V& a/ w n( k: ?/ c
C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名1 A1 ~: x8 ^* h3 d. d% y
O 组织名称6 ?; H4 R! [, [
CN 友好显示的通用名6 _2 o" y3 Q- |: t
–ca 表示生成 CA 根证书
: k, K, u2 ^# v; l/ I7 j$ h–lifetime 为有效期, 单位是天( D$ Q! o3 S4 k9 |" B$ ^& f
. F& `$ a+ X3 u! ~0 P7 ?- Z+ d生成服务器端证书, p. S$ S( u' X$ _: ^
; y; N5 f |1 [' ]; c' F
1. 同样先生成一个私钥
+ K! D; }5 _; q" j4 B, y+ } ]9 c1 e% t
1- ^) s5 K& d' U" R
strongswan pki --gen --outform pem > server.key.pem( \: F; D( v4 \
2. 用我们刚才自签的 CA 证书给自己发一个服务器证书:
V" |8 j. y+ @+ I7 m
5 D, ~* B8 J" L/ O+ ?5 f1
8 {' d/ u& m4 W% N0 }% Z+ Z E2 g2
1 C* @5 K2 d! r" D33 W4 v7 i+ ^- w1 X- ^# @
44 Y5 x; I: l% H5 m3 ?
58 d c, ?5 i7 U0 P2 ^- E- l9 f
#从私钥生成公钥
; |1 c& `3 f, t7 J7 @ zstrongswan pki --pub --in server.key.pem --outform pem > server.pub.pem
6 [9 u6 [) j! H9 c1 A1 e " h/ O, A" J* X- H- M
#用刚生成的公钥生成服务器证书; W2 ` H( I4 } R
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
5 @8 \+ [& D7 m6 B–issue, –cacert 和 –cakey 就是表明要用刚才自签的 CA 证书来签这个服务器证书。2 m+ d- L5 j* V/ j7 {
–dn, –san,–flag 是一些客户端方面的特殊要求:
9 w! }( S' q2 M8 k; O* n5 _1 a0 {8 [2 K5 ~3 p# }
iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;5 `& d" j! U7 I
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;) G" ?1 j3 I/ f" Q" s. y6 C
非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate; w1 s, D( w; K& K" |7 B
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,–san。5 ~% v. T. Q1 I3 w) G
生成客户端证书(可选)3 }$ v7 b8 g H5 U* C
% S( I0 D( A* c% ?& I3 D4 `
客户端证书是在启用客户端证书验证的时候, 用于验证客户端用户身份的. 每个用户一个证书. 如果需要很高的安全性, 可以用客户端证书, 一般情况下, 不需要使用.
2 D* S7 P( j2 q! q& X F0 V1 j4 v
1. 依然是生成私钥:. U8 f1 r6 c$ w
" J/ p. J: ^9 B8 c. Y8 Z( d1
7 ?; E$ g$ f( S, W( bstrongswan pki --gen --outform pem > client.key.pem. h6 p+ C+ T4 \# ?# w( V) x" M0 d2 a
2. 然后用刚才自签的 CA 证书来签客户端证书:# l b# K) U6 }/ E; O
: R+ E! W9 E* Z
1
% p$ Q3 j- t5 o- e V: p; y5 A2
# X e; ?1 a3 d6 B% \ W3
" {3 R8 J6 b+ v8 F4
% l$ F R* Y% X) E53 r) P; r+ D" j# j, d% [: p2 }' U
#从私钥生成公钥* b1 [& c% s/ q @
strongswan pki --pub --in client.key.pem --outform pem > client.pub.pem
' n$ t1 Q% A- t% I5 m$ t% ] $ r( [( @0 T; ^$ M; p3 |0 r5 C
#这里就不需要上面那一堆特殊参数了
- f* [0 W) I$ i P% ?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) m9 m4 m$ e4 S5 k1 a! T8 H" ]
打包证书为 pkcs12
, d" `0 K! g$ ?" B5 Q1 o
# P! v% L7 z' N1
; C- h) V J2 f8 B# N; mopenssl 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
; o" ^% F! R5 J, `此时会提示输入两次密码, 这个密码是在导入证书到其他系统时需要验证的. 没有这个密码即使别人拿到了证书也没法使用.1 Q2 J5 }+ W% G) @1 {/ |5 i7 s
n, k7 H! ]" T b" I9 e& C安装证书
) N* F+ e, r. Y* f' Z7 H( z; I! @, z5 D, y9 \ r, U7 l) Q. A
1
5 Q! u9 x+ n# K) x% G: `' d: k2# {9 m& s% D& X, ~ y
3
6 S* j5 V/ X8 o5 `4
( l& M" f2 \" o2 q5
6 N4 H% d' R. f2 {4 c6) M- ]% ~$ m" [$ ~
70 ?# R7 a2 _+ A: M* e, g" J$ c
cp -r ca.key.pem /etc/strongswan/ipsec.d/private/' V4 I' a/ G5 ~" x! M, S# {
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/8 x2 E" p. R: \& |) K* q* r) O
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
; d" |' ?3 ?- lcp -r server.pub.pem /etc/strongswan/ipsec.d/certs/
) g9 Z2 ?" f* Mcp -r server.key.pem /etc/strongswan/ipsec.d/private/
' o3 k" D" g: d3 v( Bcp -r client.cert.pem /etc/strongswan/ipsec.d/certs/ Q* J0 O p& Y% U
cp -r client.key.pem /etc/strongswan/ipsec.d/private/0 U/ ~7 c$ a# _( z2 N8 z# d, }' |* P' B
把 CA 证书(ca.cert.pem)、客户端证书(client.cert.pem)和 .p12 证书(client.cert.p12)用 FTP 复制出来给客户端用( T% @7 t) q: u4 x6 b+ c
* | S8 C; Z: ^/ T: p! F. {
配置 vpn! W8 b% q. @+ ?! J$ Q/ p
1 o1 V& d2 R9 w
先修改主配置( Q8 Y u. t7 m& H/ Z$ b6 l
1 r5 e0 X ^, Y官方文档/ o# n1 W; p. m% P
& ]" b5 N2 | F% u) i. t1 W
1
; A/ M& {/ r5 W3 M8 A, c9 O0 U6 Z; {nano /etc/strongswan/ipsec.conf# ?5 p) z, P% \ T e7 C8 w* e
下面是一些常用的设置说明
" T" ?+ P& z4 C$ \4 K; |/ b2 x8 y r' i+ V6 F4 i- L' {; d
1
0 C8 h" Q: z. \$ m2% h& A4 R/ w# K2 `2 s4 w
3" R1 d" Q, D4 K
4
" u* O, @% |9 `! `7 t2 K54 K9 \) S- X; l* ]
6* p/ I+ g7 \: m1 B0 E! @# }0 s' k) T
7
, P% `: O& w# O7 _2 C6 o5 ~+ y2 t8
- O0 M- ~2 s% V9
: F# _3 r( q2 {0 e \10- x* v( c2 {. Y; ?8 Q* R7 D
112 U6 _4 u) @; ~
12
3 a9 Z) I4 u" ~& ^, j1 j7 p0 p13
1 C" r: q: N7 H5 {0 Y* x14' Y2 s# B, \1 }- `& {" r
15
: n9 @% u. _, e6 O6 k1 n! U* I16
; `( l. Z$ H0 v% Z8 f174 x" L( p v5 r
18
1 M8 i5 q- }+ h; s19! O/ w- ?% r% q* X
206 Q( n2 _7 f P' o/ m
21$ j8 o' _; h- @- O% A& }" e3 J
22
7 d v) l, W. A' v, H& N23
' w8 T: x8 S1 z+ H: E24) o- r" S, U1 \7 E
25
: A; k' l) ^; T: \" s# F26" f! c7 i- P$ c2 v- N" \1 K4 R7 Q6 j
27
( e; X" u: I! `, D280 _* Z% O3 G. w& g5 r4 p, v: @
294 {* w F2 a% P& e ]
30
* y4 M; i8 b& Z1 P% p# Y310 Q: [6 E% N4 d( V" F: y
32
8 S2 k7 ~: I! s8 S/ z% B9 ]* v: {33
) H& y5 {5 H4 ~7 ` K- T343 J9 W0 t- P* O4 _+ g* V+ d- ~& t" i* M
35
- h5 s3 E1 B/ [* ^( Y9 X5 M& T3 i' j36
y' ?2 c& G1 ]+ G. l1 C: Q376 }4 c0 _1 q2 s# {5 X$ l$ Y
38
a: p' k( S! V39
* I) l+ y$ ^) t K+ d, u6 y40
1 x7 a' G2 O! f0 g2 ~3 w41
4 y2 O# |' J( }5 G) T42* W0 U$ M7 |; G5 r4 Q/ M# ]
438 I# f0 I2 T9 E, o* ?. l
441 t! J& m4 K/ F/ `( Y
456 f5 Q- v4 G+ G. ?# W9 O! ~8 H
46
4 j1 A# v) K1 X8 G6 Q47
3 `. y1 O4 L$ ]9 p48
7 z V9 _( b; y+ L49
7 ]/ \& F3 Z4 q/ N50. n) }" {8 j3 x/ f
518 \/ }* E- Z& K n% ^% X/ b
52. c$ s, _1 K$ j: j+ I
53
5 u2 `: @. r2 X6 t* e3 o8 F* U543 \& k8 v/ `" T2 Q0 L% y) B& x Y1 R
55: Y) |% ~4 Y3 ^
56, i( y( w& N0 m! m( k9 s
579 Q7 r7 Q$ n- Q, d h
58+ m$ q' d" M9 g0 O) d! X8 Z8 Q( E
59
' i; Z; T j" K603 n8 Y$ |; Q1 ]" _
61
" C% B# W2 b, E! o$ |, n) V/ L9 W62
3 G3 E5 w. t: e5 s1 d$ v63: {! `+ v1 k( z8 z# f/ T) k5 K% a1 D
64
1 o ^( Y/ A6 v4 U2 z# ^5 s% o/ o4 d65
$ q0 \: D9 W& L4 A3 v66
3 C% [6 J4 D. p67
0 Y+ v+ n. K* e8 O4 X68
% M& p8 X5 A4 a, ?, g; @4 V69* l. o* e) V- e8 ?
70
5 m( Z: z' D- c, U71
" W9 S+ b) E, v+ _, c) H72
+ Y6 v/ K+ T( g1 Y* E73
% F8 y \# C, v4 V7 ^# L/ Z2 j74
) J5 f; l! ]/ P- {4 i75
2 S2 y) b/ X8 r76
) e: Z9 G. H1 A5 b77$ W/ r; \0 A' u/ R6 p
78" T" ~8 U. ?) j
79
7 k5 Y7 V- y. C4 c6 t4 m80
* k0 k6 `$ W/ s; Y4 I7 u+ S5 U81
' M" s9 Z% U! @2 ]7 D; |; t/ Y82
7 N, S4 U( J$ C# k" D83! ]/ i$ Q/ f: O
84( H+ M4 q# Z) ^$ s1 b
85
" d& G# _ J+ e @86$ F; c& Q L! f1 m3 ]
87
3 q Q$ ]/ C7 v# S/ T- \88. R9 L* U. L& b- |2 X. |
89; |& B% v$ S3 R# z/ {( n: z3 r. R
90
; ~* R! _. @' e& u; S# z" T917 G3 z; O Q0 Y
92
Q$ k8 l! d5 ?, U* g; i& A93' b: C2 ^* n0 I9 u6 K* d
94
$ m5 L n/ A- J3 Q7 ]! V$ o8 r9 T95
0 R8 H, l4 @8 c96
" |3 C9 O f% s+ M9 x6 _' x97
: A* ^& Q' h# u9 v$ U98# w4 E6 H) R7 U, c/ @$ H5 W
990 q. j- K6 T1 ?( V- F2 Y: R
1002 D5 X0 p) ?2 i
101
1 q7 G9 D) ^; l+ L102
0 G4 W- M+ ?3 o& q" a( V; i/ w, N103: V- X( V2 J3 {7 t6 G- A
104
9 G! [3 @1 G/ q5 }105! J/ r2 t/ _7 n; N
1069 O$ A5 f. \% j7 p1 L" }+ A# H, k
107
9 e$ A. V! T4 J9 X% |; g: U4 o108
, A- o! S5 l7 R109
& y. o' |, {& |* \" ?& D110. e- h- d6 h0 B% X* p& s$ d ~
111
: e1 y6 Z9 l& H' w: econfig setup
- T2 r. M- M9 a( ?
, h- t; E: r/ j' C0 } #是否缓存证书吊销列表7 f) d* E: I v+ T$ F# [
#<em>cachecrls = yes</em>
3 W) A# [* f' g6 n3 Z* ~ 3 n7 }& X$ ?( j* _: c
#是否严格执行证书吊销规则% [6 _: e6 j9 l' c1 {* w7 u
# strictcrlpolicy=yes
6 d! v# K2 P; t9 k6 `' f 1 S' {5 x7 }* g2 |. `) G3 A
#如果同一个用户在不同的设备上重复登录,yes 断开旧连接,创建新连接;no 保持旧连接,并发送通知; never 同 no, 但不发送通知.
( z# C2 j& h, g* m* S uniqueids=no% ]( B' C6 w" @' B
% t E# Z4 n, F8 t( `4 t8 M( y* N' m) w
?: t) Y8 q) U/ i* P h#配置根证书, 如果不使用证书吊销列表, 可以不用这段. 命名为 %default 所有配置节都会继承它
, `2 Q9 g( N7 P" Z7 z) Y7 I#ca %default- U$ C8 U; g9 e# ^& ]3 B' Z' p
# j. ?5 f8 ?! }6 e$ T7 j1 ]6 C4 D #证书吊销列表url,可以是 LDAP, http, 或文件路径
3 ~$ l$ \+ _4 I& F/ t #crluri = <uri>
* a {1 {. [7 ?8 A: \ : S! |4 W' o1 J) u* l
) Z, ^* W5 J6 y& ]; L#定义连接项, 命名为 %default 所有连接都会继承它
\5 y; e& z- S6 w" L9 [: q8 oconn %default- o4 a; \; D5 C4 Z) G
3 m: d7 R( H7 f #是否启用压缩, yes 表示如果支持压缩会启用.0 [# _5 g+ [0 {* w3 a/ X
compress = yes! N, V) W+ x" U6 m) h4 u
7 N/ H3 H7 `. H7 U; p #当意外断开后尝试的操作, hold, 保持并重连直到超时.
5 @! A2 U. d) R+ |: u+ K' y0 k% w dpdaction = hold
' T+ E; v0 C1 W- W3 x; g
4 K, w7 `* e& }1 S' G) K% A #意外断开后尝试重连时长' z4 z$ |, W9 _% |* K3 |
dpddelay = 30s
. Q. f; V1 z. H
) y- x( y7 B, j \ #意外断开后超时时长, 只对 IKEv1 起作用
# k7 s [: h9 S, O dpdtimeout = 60s2 `5 `7 A5 y1 h' ~6 \2 X3 e. c
9 x6 B2 F+ I& ]4 T #闲置时长,超过后断开连接.
& ^6 G3 }0 F2 _/ k; m$ F inactivity = 300s' K# ]$ X7 {' \- Z7 q$ A5 Z
# r- r) q6 Q4 C; W
#数据传输协议加密算法列表
) [$ N( h3 H3 x esp = aes256-sha256,aes256-sha1,3des-sha1!% L/ m0 _) h8 `; c% _* ?( A1 Y, W
! }1 N9 _# h1 E& I( D; _( F% u
#密钥交换协议加密算法列表
, D! a# j1 {+ ]4 \" s ike = aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!7 e/ j! A& p6 o5 z6 `
) D0 s+ f' Q5 X1 X7 ^ #默认的密钥交换算法, ike 为自动, 优先使用 IKEv2
! u; B7 L, J) w/ \6 }/ V keyexchange = ike( j4 t% a. ?9 d
; n7 Z0 @! |1 X" X, F #服务端公网ip, 可以是魔术字 %any,表示从本地ip地址表中取.( n3 Q! `+ V" d; c0 R9 T
left = %any
% q5 ` [1 q. j' W #客户端ip, 同上/ \6 G0 d/ w* W* G4 o" e+ u8 }1 l
right = %any
4 N/ w" p, ~1 x4 f$ X6 D
8 q2 N# z/ {& Y. F #指定服务端与客户端的dns, 多个用","分隔. n% Y. f3 A' [* }; K( M# d, O! R
leftdns = 8.8.8.8,8.8.4.4
" U9 g: P& _. |, T j- s- v8 M rightdns = 8.8.8.8,8.8.4.4
' }. w8 r! E4 j0 F d' @1 ~
4 t2 s1 k3 d( Y #服务端用于ike认证时使用的端口, 默认为500,如果使用了nat 转发, 则使用4500! v7 ^6 c/ M5 X
#leftikeport = <port>
; Q) Z' g3 e' s+ x8 R, \ ) Y0 M: H# t* m( A+ m
#服务器端虚拟ip地址
, K/ N! W5 r8 v9 G8 ^% C0 I #leftsourceip = %config
, b! J9 L2 C) @- D# n #客户端虚拟ip段+ F6 s/ N' z" A* a! `
rightsourceip = 10.0.0.0/240 i( ?4 a6 q8 {' h. f' _
) p& t0 U, b, k) O h; u9 g0 e* x3 u4 W
#服务器端子网, 魔术字 0.0.0.0/0. 如果为客户端分配虚拟 IP 地址的话,那表示之后要做 iptables 转发,那么服务器端就必须是用魔术字( Q$ B$ x- k1 M& H4 j! ^& Q
leftsubnet = 0.0.0.0/0
5 p3 A# U* [- E! i8 N$ {: {5 ] #rightsubnet = <ip subnet>[[<proto/port>]][,...]
' f. p" @. Z" G5 B% S
3 c5 K3 Q4 m3 Z5 `conn IKEv2-BASE6 I1 [% [* X" N6 r
! v1 j3 n/ c" f9 Y #服务器端根证书DN名称8 X; d C9 O3 G
leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"
' S5 M* @9 s b* ]# C& {
4 O3 X: M+ |1 ]# H #服务器证书, 可以是 PEM 或 DER 格式0 Y9 E& L5 q; ~* P+ f
leftcert = server.cert.pem
- s: x2 A7 X! ~5 W7 Y5 O #不指定客户端证书路径2 ^# e& B& b. I. }) P' [9 G2 F
#rightcert = <path>- D( q! a+ Y# e9 P. c3 v/ i2 m
2 K1 u4 a/ C, N7 {- z; b+ a
#指定服务器证书的公钥* t9 ~- H) ^ a6 [1 _; U+ y: w
leftsigkey = server.pub.pem. h% k2 n, o8 R8 @9 p0 }) ]7 J5 G
#rightsigkey = <raw public key> | <path to public key>
( P* k! M- n7 P5 Q ' m) l) [3 l9 V
#是否发送服务器证书到客户端
4 K; `! v8 T7 \7 \/ o5 C" q leftsendcert = always) M0 b$ ~" _/ J# ^$ o) h& D1 K
#客户端不发送证书
3 @# X' I; L; @3 t8 K rightsendcert = never3 {9 E: T7 A1 E1 @* |
' C7 A( i. G' H5 i; Q" V
#服务端认证方法,使用证书
+ `' E# O: m! |1 I, A- x leftauth = pubkey
' ~, b* i( Y+ b, B4 e #客户端认证使用 EAP 扩展认证 , 貌似 eap-mschapv2 比较通用
% V# ]8 V( V5 o; |: P& _ rightauth = eap-mschapv2# |2 M: |7 N$ H
$ ?/ Y1 {) k& a- i K: d
#服务端id, 可以任意指定, 默认为服务器证书的 subject, 还可以是魔术字 %any,表示什么都行.
; t: |4 R6 @5 V" }' i8 i6 y! z leftid = vpn.itnmg.net
. t1 w5 B8 n$ J/ `' x% P9 V2 g! ^2 \ #客户端id, 任意
0 H- a8 a$ T6 r1 _! J- }7 X# _% i4 W3 b rightid = %any
! C, z( A) D* E. k+ I' L! h0 {& K " ?4 Z/ D0 x" D
#ios, mac os, win7+, linux- u9 C' {- i) h+ V* p) x5 D
conn IKEv2-EAP8 o8 Y) D I# V
also=IKEv2-BASE
1 L. A ^( ^7 z+ p
) X- d @! ?. U' d/ J #指定客户端eap id
3 i' G# [, |" I+ @+ U5 K eap_identity = %any
5 c4 J3 N- g) H1 q/ \ t . W) K7 ?5 s' ?, S* n' k0 @
#不自动重置密钥
' ^" a, Z& g* D# H d rekey = no
1 a3 _" }" Q" C) F
% s* f+ H* j L) D4 T; v0 N #开启IKE 消息分片0 i, g7 I2 E5 p9 d
fragmentation = yes
0 x2 f7 X8 z6 e! j
3 @' u1 E2 e! a) C/ ^* B# t #当服务启动时, 应该如何处理这个连接项. add 添加到连接表中.0 ^9 {% a/ H2 G9 d0 {" Q
auto = add
( ^( H$ Q( t# g H0 _+ P( z! Y我的设置项! V, ^( y. o# W
! d: ?- u8 _' f. ~1
3 i6 R" ~ B5 r* s a2 A2, D; c+ c' E- k& [. u2 F# w" U" _
38 H$ n# A6 k" e. t C9 f
4
4 J/ j' R2 g% C51 I1 q8 z) g$ R/ K% j9 T3 q/ {& V
6
3 n' q& s0 T$ e% P& a4 J1 h6 w( D7
9 M. g, q" q7 ` {' @/ k& F4 _8
1 d; _6 y+ ^, m+ {9
. X5 a; ]8 ?! H- c$ H. \10
( V9 {" ]% q( T1 T" \7 d11- _( e% o( U) n9 P! L6 u
122 Z, H5 t5 a4 C) Z z
13* F J) ~$ B7 Y( r- x& _/ m
14
1 u. {6 r0 P; @; T9 g$ D$ y0 }15 W; l1 c8 ?* k
164 m# t" A' E# J% M! k9 `
17+ \' \' L, ^* J. H w' {% n* ~
18# s# u4 d6 G+ b$ F4 Y' ^
19' ~' o. y2 }* c x$ \& r# z
20
$ d2 t+ B5 g+ }' B" W21 P- W6 T' L' s" Z$ k
224 z8 n1 |: g% y* y6 g+ x' l) ^
23% [* |4 i$ b i# ?# q
24
- o8 y2 V6 @! r0 m# `& ]" g259 j: ?# \8 n K; G+ L' w
26! O! X, R4 D9 U x, y! E k* n
27) R J* t/ E7 L U/ A. x
28
9 R+ \6 ?" V% q! D0 q- P% ~29" q6 Y0 S+ ^9 A6 C& P$ g, _
config setup
% P X" L! Q6 G: S0 A7 g uniqueids=no6 D' v, L" i1 y! q' Y+ D
Z( H% f n; J+ r7 L: Fconn %default
+ f4 E& K* @3 _ compress = yes
" U( r1 T( y' F esp = aes256-sha256,aes256-sha1,3des-sha1!4 A4 |0 B8 J: D- f" i3 \
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!
$ V6 y4 [; A3 [ S5 b keyexchange = ike3 T6 f, i9 @& j5 h
keyingtries = 1
# g/ t7 }0 R& G leftdns = 8.8.8.8,8.8.4.4
5 Q5 S' \( A# ~7 ?( U# Y+ p. ]* R rightdns = 8.8.8.8,8.8.4.45 i1 T& a8 Y4 L' t
! M8 |5 S3 {/ Sconn ikev2-eap& ]$ s: B; D8 O* ~/ C' B9 b
leftca = "C=CN, O=ITnmg, CN=ITnmg StrongSwan CA"8 ~0 o2 z, a6 v+ {. y
leftcert = server.cert.pem3 N4 H6 f5 ?) j5 G, b% E( B
leftsendcert = always) p6 m6 |" }; @ ?
rightsendcert = never
7 m |7 [, Z* M; O leftid = @vpn.itnmg.net8 ]9 k. t- j9 H' {) p4 c5 ~; X: E
left = %any- }+ o* L$ {) o \( J
right = %any
2 K3 c8 J& W7 ^( ^ leftauth = pubkey
4 M) B' A6 N% B, t- S% |$ p rightauth = eap-mschapv20 C2 Z- z1 ]2 X% w
leftfirewall = yes5 m3 i1 t8 J& k* a# Q2 B
leftsubnet = 0.0.0.0/0
# j6 [ _& v% l- i* x rightsourceip = 10.1.0.0/16
" H! ^+ W6 K3 I# c7 C5 V P5 u fragmentation = yes( `0 _0 D* y |& J% |
rekey = no
! J* d) B* {1 s eap_identity=%any. E: s' M. `# w. N j8 H
auto = add, f/ X8 \2 V* ?6 f9 d; T" A" a& {
5 x$ ~/ E( u/ _! r$ D, A8 O5 ?
1 `7 d ^) W4 C4 l; y修改 dns 配置
X* b* t- `2 a- [& o Z5 `1 i7 m+ [" d0 o$ r1 ?* z' _
v5.1.2 之后, 所有插件配置都分散在 /etc/strongswan/strongswan.d/ 目录中.
O- C1 c6 z6 \9 S1 t4 N: o0 Q/ t$ ~8 @7 d$ J9 `
1
: R- p' l8 h/ R& e8 Inano /etc/strongswan/strongswan.d/charon.conf
3 [+ u+ n2 y8 e* U2 X修改如下. D$ X/ o D8 _& q% ~* d6 U7 C
( C! ?7 B; V, [& b6 X2 C! z- f. e2 ?' E1 y
1
" C* U+ ^) E# z# H# S. g2" }0 ?; p( _# O' M5 u
3
F' F, o; k/ I( Z& p y4; o- G% U3 j( a1 T* m
5
: y) l( G& I- U9 j6
; `! l8 V/ g% B8 o9 F71 k# ^% g1 f+ a/ Y
8
" Q, \2 [5 y1 S) P/ J7 k9
( J) Y5 ]' m% e5 L8 X4 ^9 `: F* _10+ i: G/ \8 Y6 T E* v. T, T
11
# j) \, ~6 B$ ]. g& F {12
# T9 G5 r7 M8 s13
% O3 w; M8 g0 ^- _6 r14' Q9 R* m( Z- ^1 ^, ^# z- V
155 M, @2 ^" W6 O8 ?1 y- P6 K
16% z) Z, ^- G: y- t' v" W1 m4 v9 e7 j
178 h* x( m9 Z' L, b7 W! e# T$ a
18# h! J8 J# _5 a9 y% T5 w
190 h7 N9 t& X6 f1 {9 i
201 D+ O0 M5 ^( q# y+ q+ V! r, V
21
+ s4 I7 q) c6 B' y; Y0 k22
% R# {. c4 v4 F23
U1 }- }' ^2 t! W+ ccharon {7 D$ ~) p: D# Y4 f
duplicheck.enable = no #同时连接多个设备,把冗余检查关闭.' u+ v% w( |% E
# q0 G) w: Q$ L* n
# windows 公用 dns6 h- x0 {5 z5 p ~; i+ Z
dns1 = 8.8.8.8
" x8 q: G0 s2 w% d+ w dns2 = 8.8.4.4
* E2 m4 O; I- [- x2 o : P+ \8 E+ a% w6 y4 k! I
#以下是日志输出, 生产环境请关闭.
$ H- Y) _/ b! ?8 w0 N" S) g filelog {
9 h4 x/ X+ C, F2 b' v# ~. r# u /var/log/charon.log {
4 P2 `, j9 J! X: ^& j. a# I # add a timestamp prefix
% ^( _$ J' C6 r! x7 n3 _ time_format = %b %e %T0 \6 I; ~' r# [1 W( e
# prepend connection name, simplifies grepping$ w ~, {# F& B8 X2 ] _
ike_name = yes
2 s- }6 W4 j6 O0 J @ # overwrite existing files
8 I% b6 S" I# x! l append = no. D- A# y1 i$ C8 j; N
# increase default loglevel for all daemon subsystems2 ]/ ]: H+ X6 p9 m3 g( G
default = 1
, P5 Z$ u+ G2 X8 ~2 W' U # flush each line to disk
2 c) } Z9 c! r' h i7 I flush_line = yes: C: M$ o7 r! W" q8 y* P
}
8 t7 i/ o8 m( S }
/ F& ~: m7 G1 t+ B D}; b+ L* N c) H& b7 X" \
配置验证方式的用户名与密码+ y; q( y+ t6 N. R* }
3 Y; f9 u3 o3 r/ i% J% ?1 S1
/ H5 R4 r$ ?5 Hnano /etc/strongswan/ipsec.secrets3 U6 N6 j2 C' r
下面添加用户
{ v5 b P0 R! ^8 l: O! Z3 m: A/ ], N5 e& c8 P$ X- Y
1& K0 {" K; d: m( Q5 z
2
- ]* _# W: C: E4 a; N! [& L( d& m3
% \3 v2 I# |' _. \3 q' |# ?4
5 s# K4 e( c/ I/ J e! _3 S% F' ]5* u# t4 m- s% i! D( Y o; n
6! x7 g$ e! Q' U2 M1 q6 F
7" }6 Z0 Z H; U) d( p& X3 B* s/ c9 q
85 ~! r g% E1 R G8 B) s( ^" H& H
9
) r. s8 `) ?1 o10& E4 t6 ]& [6 y) j
11 E5 Q5 \+ l+ D2 @ J
12
+ Z9 m; M6 G* Y& F( e8 Y3 p9 ?* K) a2 o133 w- X* s& m; Z" }& f7 y
14
6 J4 g; L3 i, I" q6 X#使用证书验证时的服务器端私钥
( M& @" z1 q H! S9 T3 ], g#格式 : RSA <private key file> [ <passphrase> | %prompt ]
3 @! {5 [$ `2 J7 u9 t# D: RSA server.key.pem
. r( S7 d# Z$ _% ~ & k0 t$ j; O' ^3 ^7 N! U) T
#使用预设加密密钥, 越长越好" O2 h4 `" Z6 \7 b6 y3 l
#格式 [ <id selectors> ] : PSK <secret>
5 r- x) n0 k8 s) [+ h5 a%any : PSK "预设加密密钥": i6 u0 f+ D- p$ }5 K8 y
% ]5 P1 B& o$ g5 L#EAP 方式, 格式同 psk 相同
1 v$ K* z) h* {7 R/ ]. n( F c用户名 : EAP "密码"
2 \6 h, t' `4 k( ^ $ Q+ z3 u$ W$ u- Z
#XAUTH 方式, 只适用于 IKEv1) h5 W+ F: s! X( p) V9 C+ H
#格式 [ <servername> ] <username> : XAUTH "<password>", L8 w$ F4 d+ T# c! {& P$ K5 m
用户名 : XAUTH "密码"
3 ]3 K% h/ X5 y; F开启内核转发8 ]% X4 K b i; K( ]
9 |/ ^ b" {4 b i1 G1
* K. l$ J7 r$ {+ i2 W' Fnano /etc/sysctl.conf
' ^1 M0 P8 h5 F4 B8 p写入以下配置7 Z2 W% p* W1 H
2 C4 x; I4 N' Q/ k$ s1
9 @; i" m6 z) u6 H( Q4 j! a. ]2* K* X9 E' a) W8 ^
3
+ Z# J' \9 H8 f: ~* h6 i% l. Q# VPN
, _3 F& C- p# ?$ Vnet.ipv4.ip_forward = 1
) |2 t% n! P. Q' X, p' f+ N |net.ipv6.conf.all.forwarding=1
% p( V9 Q0 l- V0 R8 z保存退出, 执行下面命令.
. J% J) w' Y3 k) [! W1 f0 f
, l2 J7 M0 u4 k2 u- Y1* M& o" l# {4 f8 c" U
sysctl -p! I) S U9 u2 R8 |' G
1 x ^- v; W1 M! u. C8 S" u) b3 u
) I7 B3 i. v1 E: m( B# L$ Z配置防火墙; C( ?/ h" B1 k- T' b* e
/ F! X6 s8 F( O4 m, X4 biptables 配置方法
! a z/ L$ x5 [( z. W6 B5 l8 o/ I1 l; K; k% v
将下面几条规则加入 iptables 规则中, 适当使用 -I 参数替换 -A 参数, 确保所有的项目位置都在拒绝项前面.* f: R) c X5 a! h+ T4 y' q
8 o1 ]' x f/ H
1
2 j( j2 V, b7 T0 M, X2
8 C% C; U* L" D( L! |3
+ k: n1 O0 t- P: }* P3 V) i9 w* Y5 _9 `4
) B+ J0 I* p7 D6 @5
/ M# d7 e) o" Y! x8 ?6& C+ u8 O# a- n6 l* _0 j6 ]; V( ~
7
7 D6 C) h/ E; x% u8* O. ]1 C" s& [9 h
9. |2 w6 e/ x; h$ n" F4 C4 Z
10
* c& O& @. U0 {0 [( L6 f! g5 Q! t11
- i2 O( T( I4 s0 a: O$ r7 k4 w12+ f& l; j9 Q" ], Q
13
" ~: m3 r1 {: \146 Z7 I7 c" A7 y0 s- S) X7 q' x
15
0 S% B: g1 U/ Q7 G& C0 T166 Q6 u3 r. R9 o/ Z1 U; X& f
#开放端口) b! _3 k$ e; f7 _# y& `: G7 M' f& G
iptables -A INPUT -p udp --dport 500 -j ACCEPT6 @/ _# c1 D/ B2 [ W$ R, ?
iptables -A INPUT -p udp --dport 4500 -j ACCEPT( W9 x7 T5 ~2 D+ x' }- O! W8 w
7 C( v9 g4 M' B4 t) |0 R
#启用ip伪装$ V$ r* r% a$ @6 n7 G
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
+ ~, b( i0 M# \. r0 y! s# \iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE! \, W; m1 D9 ^9 }8 n( E3 T* ~- A, I" W
! Y: E/ g8 p2 }6 L) o1 }$ f5 ^
#添加转发
' B- C6 [/ b- ^$ f/ u# O* E6 Iiptables -A FORWARD -s 10.1.0.0/16 -j ACCEPT
% }5 N p8 {. s0 z/ s ( K' Z/ Y; Q6 |. F' g G3 c
#保存规则
; X% |/ c1 p( K2 j9 X, @/ M5 p! rservice iptables save# a% D* X. X7 j" c9 l: a3 V
9 z2 {" F, x; I0 O, @
#重启服务! N: s. `* ?. I" Q6 C% j
systemctl restart iptables# q/ I- c- Z. I7 f/ g
如果嫌上面的操作麻烦, 可以直接编辑 iptables 规则文件.
9 p/ i" A- c9 K$ ~. h/ ^9 v6 u4 L m: x3 @$ ?! ?
1- v+ d( [- N3 T! @5 F
nano /etc/sysconfig/iptables' v8 z ^4 G/ \0 W
将下面的规则部分贴进去, 不要整个复制粘贴, 根据原有规则适当调整每条规则的位置, 确保规则在拒绝项前, 使之能生效.2 {" z! S6 W: M1 r
; j9 w3 [( s% e, {3 z% O
1
' n) C% S0 ~, X) t$ F9 ~2 K, L2; Q1 ]+ d% U# G, r6 b6 I
3
" C# p3 ?- N1 g4
$ y! k8 {* K& b/ b' T, b5, f( @! b# b( n7 h _/ B& |/ i4 o
6$ @0 S" U, [# e* Y' [1 n/ G: i. y* P
74 |+ Q }, q4 q: Q. Q- S
8" ^8 A' x3 K2 y [/ ~# M; `0 w
9+ V" G! |6 L7 M. y5 P
10& V+ [' f$ i! r- P- G o! N
11
+ l$ X3 b9 b6 ]12! Y7 |3 J! _6 {& }2 q5 U2 j5 P1 I
13% m" D% X! E5 ]% p/ K" c8 @, \
14
7 _/ @( ]. {) I" C0 L) S15' h1 S* f9 ]' e: }3 J# a2 {, ?5 n
16
0 [. a6 ?# e% t% K17
4 l, ]' }$ B$ z- u0 C7 [+ t18
8 Y0 h% ?; G: n5 X" v* |19$ h4 Z$ E* E! @; C3 k6 [ E, `
204 `7 k$ O* [" d; U) a7 {& Q3 b! T ]
21/ y3 O+ l$ e+ Q! `1 P8 i! z
225 F# ]7 }8 p$ E6 j) @* [. U
*nat1 `" O h6 p( L: M3 g! p( }8 l
:PREROUTING ACCEPT [0:0]
4 ^( T7 ^) V' Y9 O7 H' v) s2 F( l:INPUT ACCEPT [0:0]4 e$ v) [& O5 ]$ u/ M% o
:OUTPUT ACCEPT [0:0]
: } b& D/ D1 R. x3 ~9 m6 l:POSTROUTING ACCEPT [0:0]0 x! ]: ?# f" N6 \- y7 v# a6 ^
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT3 E; G7 I: J# t P+ G) R1 ?
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE: F) j' T9 p8 ^$ m$ w6 T1 b6 D+ ]
COMMIT! _- m) d+ f* O. _* [4 V- e
*filter
4 A4 r9 ]( P, m1 H:INPUT DROP [0:0]
& K- I2 g, |, z' V:FORWARD DROP [0:0]8 Z. r% \; w5 I8 |6 r
:OUTPUT ACCEPT [0:0]9 \* k/ n9 ?8 l& y" R/ r: v) ^" P
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT) `% P& A* ]1 t O! j( r
-A INPUT -p icmp -j ACCEPT& O" w4 g! {+ x2 z: j! X% w
-A INPUT -i lo -j ACCEPT
$ ~& Y: \( x6 B-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
8 }$ D% S# K! a6 `2 U, J-A INPUT -p udp -m udp --dport 500 -j ACCEPT
, _ `! S" c5 _ I- e9 I5 W-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
/ Y. S8 c* @8 o, p" Q& ]$ a, m-A INPUT -j REJECT --reject-with icmp-host-prohibited
: J3 v$ |# B) D-A FORWARD -s 10.1.0.0/16 -j ACCEPT: w0 q" o5 S- T! M1 g
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
V& y1 | N) j1 n+ g. BCOMMIT% i+ v) U, g/ _" t0 F& ^- c
保存退出, 重启 iptables 使之生效.
) ]8 d! s% y; x C( K/ d
9 H" U! G( G, t. c9 g1
! y K: {* |: M8 H7 Psystemctl restart iptables
" i4 y9 Z \3 i f" [; C& U 5 Q) y' C4 E% s0 ]+ j9 t( H
; m. }0 E& W- ]; f
以下是 firewallD 的配置方法, 使用 iptables 的可以忽略.
8 T1 w, b" L( l) I( @7 C+ p2 [
firewalld 介绍请看 <<CentOS 7 firewalld 动态防火墙介绍>>! t1 J% r+ o# t3 P2 C
& J& x) I* X7 n) S/ ~首先将公网网卡添加到当前区域中
4 Q: _* v3 v; \% a; t$ U! s2 b5 y( W0 w! c
1
, w% D$ ?8 F! g8 Y) B+ H! l$ {2
1 _ ]) c- |6 y2 M1 l; o9 z#查看所有网卡信息, 找出公网网卡 w) i) N) w# L0 R5 ?6 \
ip addr
3 o& \, x. @2 D+ H2 G编辑网卡配置
6 D+ Y: w% i7 z
/ k9 F( a6 `& S m0 b% `: |1& E& |$ Y1 ~) w9 |; x' N% l
nano /etc/sysconfig/network-scripts/ifcfg-eth0
' [0 \" U. S4 D在最末尾加上区域配置! Z- K8 q9 ?2 d6 C; Q; q* ^, {: I
# C J; @' V# K1 d1. G' X3 L0 g7 v6 N0 w" A
ZONE=public
$ s6 P! s% R1 [/ e& g保存退出,重启服务
. P2 X5 u/ K$ A& d( L' u
: l0 `3 U" p8 h9 R3 w) N1
8 s# e) }/ z, u2
8 h+ x! f2 Q0 E+ P" w- R9 @5 wsystemctl restart network
% Z, B! X+ p7 V9 Z2 e/ M8 }+ S8 f" zsystemctl restart firewalld
+ z+ C4 d$ I1 e0 g* m& V' ? / s% r5 o5 F7 ?4 L! C- l& [* S
8 }: L3 M5 f" I3 e1 p8 w然后新建一个服务
' {8 g" Q- i7 [7 u0 c2 X
" H* ]1 Q0 M/ B Q, Y3 V6 y$ ^% ~% c1! j" z$ o9 x- P
nano /etc/firewalld/services/strongswan.xml
4 l L+ n& F; W填入以下内容# k/ \# c0 a3 ~7 d$ F% c# G9 e
l3 }: _, M- R0 k# f
1
! X/ {+ c/ C% b2 f8 l- ~3 c2) h7 W" d. T0 w: L# X0 p
3- v% _4 @/ k v( [0 q
44 I( |7 A9 I, n- a6 t J: G& u, ]
5
: X7 e1 x, ]5 N: e6 Y1 d; E( K- C4 k: B
<?xml version="1.0" encoding="utf-8"?>
% o+ \3 ?- J6 J- m3 {6 k+ b<service>
$ }8 B: z5 ^$ N0 [8 p <short>Strongswan</short>
* U! c' G/ m( M+ e <description>Strongswan VPN</description>6 G; Y& b4 j2 F6 ]. L* \
<port protocol="udp" port="500,4500"/>. H2 `3 m+ {1 \8 A! |2 P
</service>4 a# X% s+ T) \5 b( `
保存退出
; U6 X: P3 V% h' G- _9 T
7 P7 |! C6 [8 {9 @# v7 P添加服务到当前区域, 开启转发
( |' s- Y: y( Y4 u. s D4 d8 ?/ Z4 @3 b
1" h: @1 v' D* ?! ?
2
. d& u% C3 x0 a' W _$ n3
: n1 X0 x1 S- _( a ~" G9 a2 n" C" R4
3 n: A, d; ~# g/ J58 O6 S. l$ B% H/ ]6 K
6
, b. O+ M* ?+ b; n W6 Q76 v* ^& B6 ~% c
8
6 ]6 X0 n( j& h0 k9
' y2 z9 p* Y- x101 o7 k% b0 g9 D, ~# @" j
11
; K: {; y" o2 \& Y+ C* \12# x a$ U) E6 S5 Y1 H$ H2 c5 o
13
1 V4 \8 ~; y; [% ^: F- o! K14
7 q: f/ B1 e8 w8 [#以下命令没有指定 --zone 参数, 都是针对默认区域 public- Y( q5 h" D! S( o& V
#为区域添加服务( ]& S3 a: K* I
firewall-cmd --permanen --add-service=strongswan/ D, m8 }& y4 |5 q1 b
$ n( _/ H& L" [, K: d, Y ) Y/ L1 [& S; o8 k, e
#启用ip伪装
5 ~& ]( ?# c$ S- Mfirewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" masquerade'; z% c- O g! \
* L9 m0 I( H/ S" u6 G& i7 P
#添加 nat 转发# u; k1 t$ g0 e/ z/ l
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"'
( ~- m3 D( J2 d4 ?firewall-cmd --permanen --add-rich-rule='rule family="ipv4" source address="10.1.0.0/16" forward-port port="500" protocol="udp" to-port="500"'' ]3 n% w7 Q! m) X' x" r E
: w# \* A* B0 A+ i! `6 g
#重新加载防火墙配置8 n* p! d/ r3 ~) V
firewall-cmd --reload5 }1 A2 e! ?* v! p* @& Z8 {
) g. P+ ^% s% O# L
/ H; ?7 g, D. M' @. Q+ Q0 Y除了用 firewall-cmd 命令外, 还可以换种方法添加上面的规则.
5 [ f5 K4 B+ y8 w( {( ~
0 [1 ?; Z! }; |3 X/ x( _8 q4 s1 N1
' G3 @. A! s+ M* }2* j/ ^/ ^$ s' y8 K$ n; D9 U! l
#编辑当前区域的xml配置文件& E/ s: Z# \1 z. G" z5 ~) C) e
nano /etc/firewalld/zones/public.xml
Z8 t# i, o1 ~6 [' e改成如下内容, 我这里只开放了 ssh 和 vpn 端口, 其他内容根据各自的情况修改.
* s( ~3 m8 T9 `7 X7 m8 o! Z5 W- O2 P$ K
1
5 _# B' t+ a3 _' w5 ?2
! R. u1 b" z& H$ Q30 F' g" d3 M U9 M- V& `6 d+ u
4 A9 R3 t: N5 G
5
' l0 J; q* e X0 H6* F# E- z0 g3 w; L, F
7
& _# w8 z& d- r/ a5 F5 h! V8
0 z' y @( C/ e, g9
4 |5 c2 Q. A8 c5 U1 \10# P) Q) D- u1 `3 q: r. k" `
110 l% Y6 J O/ d$ _7 t- A8 ?- X/ T
12 n$ t# `4 {6 e
13
$ x" ^ D- x6 Z14( W/ |. T- I# l5 R$ U: q6 Y# U
15
! s' ^, E5 b g& s1 Z- G: Z1 K16
; X" |# h/ I m6 P/ {% W' x2 V17
6 J4 j" j' s6 \9 ?5 N; g+ b- o, K3 y( q18
# J& D5 E. q7 w) K0 p' \4 B19; ~ h: n. y; q7 U" f7 H+ B1 {
<?xml version="1.0" encoding="utf-8"?> O' b3 T# e5 ?; A. o
<zone>
& H, s" p, J- a7 }2 ~9 x <short>Public</short>
) B( Q4 Y! H# ^# w0 Z5 b <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>1 J- h# j; ?2 D# J* \3 Y( f- i% D
<service name="strongswan"/>9 c. ^/ F. a" I( n
<service name="ssh"/>
2 l1 `" {6 S4 z/ i7 s6 A <rule family="ipv4">
" r/ }; U8 G+ ~$ S <source address="10.1.0.0/16"/>% w7 }- |9 O- A( q% X3 e! U
<forward-port to-port="4500" protocol="udp" port="4500"/>4 G) ?, c0 b) y
</rule>
" F/ p6 s1 C1 Q, K* w <rule family="ipv4">
, U! ^- ]0 c' g/ `0 f9 V, j# a" j <source address="10.1.0.0/16"/>; H/ A3 S! Y0 r5 v. a
<forward-port to-port="500" protocol="udp" port="500"/>& m+ u6 B& M+ T) K9 s: `- n
</rule>9 R$ Q; k. V- @" ?; k
<rule family="ipv4">
@9 a1 i3 K- M- e& ] <source address="10.1.0.0/16"/>* W8 h: L' G$ H# c" }
<masquerade/> k* b/ ~2 s g5 V0 O6 Z
</rule>
+ L( H. Q7 w+ U# |' D</zone>
4 a: V2 f! |% \2 x! X* x: p# ~1 u' O/ Z9 K) H$ k+ {. @$ J* C
2
3 w, M* D) n I2 X8 k4 N#重新加载防火墙配置
, S4 o, w) J- N! [0 \6 }firewall-cmd --reload
/ I/ N' b5 S- Z9 Y7 t7 z H
' _# _( H4 b! ~+ ]$ o% F \& u
+ N3 ?( v, ^+ W5 Z/ S配置完防火墙后重启 strongswan 服务# e. ^% Q5 o C& q1 q: N1 i$ i
4 s; g# U3 h9 l! f. M. E6 \
1
1 `, }& _$ r, v2 R# I" O+ n2
, z% K) |# P, P4 l3 c" qstrongswan stop #使用strongswan 自身的命令停止服务* ^& n1 u( ]2 E% p& Y# q
systemctl start strongswan #使用 systemctl 命令启动服务
/ Q/ i! s/ F0 H( s! ^ I$ K* M这里不使用 strongswan restart 命令的原因是, 使用这条命令后, 再用 systemctl status strongswan 命令得不到正确的运行状态.4 Z- _4 i, C5 j# e8 ^$ o0 G. F
' ^$ B6 C1 Q. o1 p2 V至此, 服务端配置已完成.
" d% g* s. x/ t) g, u4 C [: b" \; [# q7 b( P* M& {
1 C, }: S2 {" |1 {
: X& J. e- I, @, @! R8 z
为了学用 firewalld , 特意用了两天时间研究, 学会了才发现, firewalld 要比 iptables 占太多内存. 小内存的 vps 用 firewalld 有点奢侈. 还是换回 iptables 了.1 c& v- B! t6 n* }4 I
' M7 C8 g+ \" X& e/ K
客户端配置
) r3 ]3 i4 j5 A# x. D, r( F# M! X$ \ M3 B- ~) `( X5 M4 X
IOS:5 g' a) [% d- _( y
1 x' j+ Z+ Z) e' h" I% n
先导入 CA 证书
' o7 R9 T$ J# H% T9 c, \ x0 V
+ }; g- ?+ H f, h将之前创建的 ca.cert.pem 用 ftp 导出 , 写邮件以附件的方式发到邮箱, 在 ios 浏览器登录邮箱, 下载附件, 安装 ca 证书.
4 a) O' T! K2 V& p+ ^5 h
2 s8 e* p' W/ \6 t6 E1. 使用 IKEv2 + EAP 认证
1 ~/ H L1 ~+ V$ t* P$ r/ Q4 ~8 n1 P; w5 P2 r. A' Q
找到手机上 “设置->VPN->添加配置”, 选 IKEv27 m/ \. g+ {* {* K7 J4 L" L7 z
6 q& D" N4 p9 Z7 B5 }描述: 随便填
% {5 d# H: R! E2 e% W9 m服务器: 填url或ip
1 ^2 y2 @" @- Y$ T远程ID: ipsec.conf 中的 leftid
; R( J# |: I+ Q用户鉴定: 用户名8 ^" ? x* J( @- G, M5 U
用户名: EAP 项用户名0 p. P2 t' P! m% d t
密码: EAP 项密码
9 J+ V% Y! j; f2. 使用 IKEv2 + 客户端证书 认证
, T# d2 M8 [& x
. q5 R4 U# l- x! i( I把之前的 .p12 证书(里面包含ca证书)发到邮箱在手机上打开. 导入到手机(此时需要之前设置的证书密码).
% e2 L5 V }$ }: `" V& K/ p
7 p& N9 Y/ n p8 i3 y找到手机上 “设置->VPN->添加配置”, 选 IKEv2& U" K7 L- K. K
. f9 D9 P+ X; ^9 l描述: 随便填
/ E2 D: b. J, z) I @服务器: 填url或ip
/ Q4 K9 i1 l5 u+ V+ U# L% [0 a( j远程ID: ipsec.conf 中的 leftid- H/ F \% s. o7 B5 V% k, Y$ h
用户鉴定: 证书1 R5 W! ?* o" H0 C1 x
证书: 选择安装完的客户端证书
( g2 W* s! g4 j0 ^9 Y- r% Q3. 使用 IKEv2 + 预设密钥 认证
* q/ U; p6 |& ^1 x1 w$ x8 C3 M
* j; k1 V+ ?2 P |* K. ]: X找到手机上 “设置->VPN->添加配置”, 选 IKEv2
- `8 A* ]: T* t" j7 R* q
' w8 H" ]6 F0 Q: U描述: 随便填
% S3 m) q8 p4 m服务器: 填url或ip
9 z' U7 c$ @" F2 g' ]9 X6 Y6 ^9 u远程ID: ipsec.conf 中的 leftid
/ a0 `) s, r) J! T3 g1 U用户鉴定: 无0 e" \. \% n8 a. g0 r8 T+ w
使用证书: 关% R! z* ~! e* T
密钥: PSK 项密钥
) k& p3 I; O9 B% V( uWindows 10" l! R7 j7 h0 c
7 ?4 ?1 c( _4 V7 }/ w7 ?导入证书:
; ~+ g5 H& ]' h
3 x8 C8 r; ]# j) V将 CA 根证书 ca.cert.pem 重命名为 ca.cert.crt% E5 |8 m1 O( ~/ a; j
双击 ca.cert.crt 开始安装证书
- W" S! n) U# n9 l- h点击安装证书
% d( O/ T$ \0 G, c* }“存储位置” 选择 “本地计算机”, 下一步5 U0 J# X2 ~$ n/ Z
选择 “将所有的证书都放入下列存储区”, 点浏览, 选择 “受信任的根证书颁发机构”, 确定, 下一步, 完成.2 `. L* z9 a2 `. @
建立连接:5 |; D" }5 E9 A0 ^
0 e+ v& S; W1 |: k$ A
“控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”9 i2 |9 ]2 |8 Q6 n; D% M" J6 B
Internet 地址写服务器 IP 或 URL。
7 L- h( B4 ?% W( @" C1 O! I+ o描述随便写。: `" d3 A8 n0 s4 I3 G; R/ F2 `
用户名密码写之前配置的 EAP 的那个。. p. ^3 E% ~# E0 ~0 D1 X! F4 a! F
确定
( p$ U9 H6 a/ [0 ~. _- A5 X& f转到 控制面板网络和 Internet网络连接
* ?* B7 e m/ |$ n& ^* g在新建的 VPN 连接上右键属性然后切换到“安全”选项卡$ W6 G: P2 y) z5 F B9 r* f) u6 W
VPN 类型选 IKEv2
1 c$ Y$ U0 _3 ?3 |7 _4 B3 M数据加密选“需要加密”! o/ s/ z# G0 B+ |6 f
身份认证这里需要说一下,如果想要使用 EAP 认证的话就选择“Microsoft:安全密码(EAP-MSCHAP v2)”; 想要使用私人证书认证的话就选择“使用计算机证书”。
# Q$ j4 y4 z) p; q再切换到 “网络” 选项卡, 双击 “Internet 协议版本 4” 以打开属性窗口, 这里说一下, 如果你使用的是老版本的 win10, 可能会打不开属性窗口, 这是已知的 bug, 升级最新版本即可解决.
' r. N/ }! s& A' ~9 D点击 “高级” 按钮, 勾选 “在远程网络上使用默认网关”, 确定退出.
4 J, R, } [2 M# |2 H7 \/ g- ~! G( PVPN 配置完成
* U2 t7 u6 L# R6 g6 z7 q* O# v1 q4 u, q; t
Windows 7 导入证书略有不同
8 F2 T# V- U, Z! k+ \/ K- X$ ^1 d5 z# _; E }
开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。- q4 [& T" h0 l
「文件」-「添加/删除管理单元」,添加「证书」单元; o6 T+ `1 a4 y9 ]8 f. a7 f
证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。' a3 t4 j' k- q( W7 [: n8 G
在左边的「控制台根节点」下选择「证书」-「受信任的根证书颁发机构」-「证书」,右键 -「所有任务」-「导入」打开证书导入窗口。; b% j: B3 @. p0 h
选择 CA 证书 ca.cert.crt 导入即可 b2 c: P7 B8 j( ?
注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。 |
|