VPNが繋がらない
問題を解いていただきありがとうございました!
問題文
概要
あなたのクラスメイトのA君は、CiscoルーターであるRTとUbuntuサーバーであるServer間でIPIP over ipsecの検証をしていました。 しかし、設定を変更しているとRTとServer間の疎通ができなくなってしまいました。
A君の代わりに、RTとServerのIPIP over ipsecの設定を修正し疎通できるようにして下さい。
- RT
- Cisco CSR 1000v
- IPアドレス
- gi1 192.168.14.10/24
- tun0 10.50.0.1/30
- Server
- Ubuntu 18.04
- ipsec: strongswan
- IPアドレス
- eth0 192.168.14.20/24
- tun0 10.50.0.2/30
初期状態
- RT, Server間で通信が行えない
- RTから
ping 10.50.0.2をしても応答がない - Serverから
ping 10.50.0.1をしても応答がない
- RTから
終了状態
- RT, Server間で通信が行える
- RTから
ping 10.50.0.2をして応答がある - Serverから
ping 10.50.0.1をして応答がある
- RTから
- IPIP over ipsecでトンネリング及び暗号化がされている
- 設定が永続化されており、再起動後も自動で疎通ができる状態になっている
採点基準
- RTとServer間の通信でき、暗号化されている (80%)
- RT -> Server
ping 10.50.0.2(40%) - Server -> RT
ping 10.50.0.1(40%)
- RT -> Server
- 上記を満たしており、トンネリングにはIPIPのみを用いている (20%)
- ipsecでトンネリングやその他のトンネリングはNG
解説
RTとServerのそれぞれの設定が間違っていることによるトラブルでした。 具体的には以下の3つの原因が上げられます。
- strongswanの設定で
auto=addになっている - ipsecの通信モードが異なっている
- ikeのバージョンが異なっている
原因
strongswanの設定でauto=addになっている
auto=addを設定したとき、strongswanは起動時設定の読み込みのみを行います。そのため、手動で接続しなければトンネルを張ることができません。 そこで、startまたはrouteを設定することによって接続を自動で行うようにします。
startとrouteは以下のように動作します。
startサービス起動時にトンネルを張るroute通信時にトンネルを張る
ipsecの通信モードが異なっている
strongswanではipsecの通信モードをtype=transportとtransportモードに設定していますが、RTではmode tunnel とtunnelモードになっていました。
今回の構成では、IPIP over ipsecを行っているのでトンネリングはIPIPが担当します。そのため、ipsecではトンネリングする必要が無いのでRTの設定をmode transportに設定します。
ikeのバージョンが異なっている
上記の問題を解決したあと、RTからServerへpingを送ってみると、接続が確立され疎通が取れていることが確認できます。
RT#ping 10.50.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.50.0.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/1 ms
しかし、接続を確立していない状態でServerからRTへpingを送ってみると接続が確立されず疎通が取れません。
user@Server:~$ sudo systemctl restart strongswan
user@Server:~$ ping -c 1 10.50.0.1
PING 10.50.0.1 (10.50.0.1) 56(84) bytes of data.
--- 10.50.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
RTは設定からikev1を利用していることがわかります。 strongswanの設定では、keyexchange=ikeというように指定されています。strongswanでは、ikeを指定した場合、接続の開始時にikev2を提案します。しかし、受信時にはいずれかのバージョンをacceptします。
そのため、RTからServerでは接続できでも、ServerからRTはできないという状態になっていました。 今回の構成ではikeのバージョンを指定されていないので、楽に修正ができるikev1に合わせます。 strongswanの設定を、keyexchange=ikev1に変更します。
修正後の設定
RTの設定
RTの設定は以下のようになります。(show run 一部抜粋)
crypto ipsec transform-set TS_IPSEC esp-aes esp-sha256-hmac
mode transport
Server(strongswan)の設定
Serverのstrongswanの設定(/etc/ipsec.conf)は以下のようになります。
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
conn RT
authby=secret
left=192.168.14.20
leftid=192.168.14.20
right=192.168.14.10
rightid=192.168.14.10
auto=start
type=transport
keyexchange=ikev1
ike=aes-sha256-modp3072
esp=aes-sha256