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