Vyatta(VyOS)で、NATが存在する環境間でのIPsecの設定方法をまとめます。NATが存在する場合は、対向機器はプライベートIPアドレスではなくNAT変換後のグローバルIPアドレスを指定します。また、NATによって片方向の通信しか実現できない場合は、通信を開始できる方を「イニシエータ」として設定し、もう一方を「レスポンダ」として設定します。
設定まとめ
IKE
以下のコマンドでIPsecのイニシエータになるか、レスポンダになるかを指定します。NATが存在する環境などで片方向の通信しか実現できない場合は、通信を開始する方を「イニシエータ」として設定します。
set vpn ipsec site-to-site peer <対向IPアドレス> connection-type 'initiate' set vpn ipsec site-to-site peer <対向IPアドレス> connection-type 'respond'
以下のコマンドで送信元IPアドレスやid, remote idを指定できます。id, remote idを省略した場合は送信元IPアドレスや宛先IPアドレスが自動的に設定されますが、NATが存在する環境のようにIPアドレスとIDが一致しない場合は明示的な設定が必要です。
set vpn ipsec site-to-site peer <対向IPアドレス> authentication id <自身ID> set vpn ipsec site-to-site peer <対向IPアドレス> authentication remote-id <対向ID> set vpn ipsec site-to-site peer <対向IPアドレス> local-address <自身IPアドレス>
「プライベートアドレス」「グローバルアドレス」のような、より具体的な表記で説明すると以下のようになります。
set vpn ipsec site-to-site peer <対向グローバルIPアドレス> authentication id <自身のNAT変換後のグローバルIPアドレス> set vpn ipsec site-to-site peer <対向グローバルIPアドレス> authentication remote-id <対向グローバルIPアドレス> set vpn ipsec site-to-site peer <対向グローバルIPアドレス> local-address <自身プライベートIPアドレス>
動作確認
動作確認の構成
以下の環境で動作確認を行います。vy003は1:Nのsource NATが設定されており、vy004はグローバルアドレスへの疎通が可能な状態とします。
+-----------------------+ | host100 | | | +-----------+-----------+ ens224 | .100 | | 192.168.100.0/24 | eth0 | .1 +-----------+-----------+ | vy001 | | Lo:200.1.1.1/32 | +-----------+-----------+ eth1 | .1 | | 200.0.12.0/24 | eth0 | .2 +-----------+-----------+ | vy002 | | Lo:200.2.2.2/32 | +-----------+-----------+ eth1 | .2 | | 200.0.23.0/24 | eth0 | .3 +-----------+-----------+ | vy003 | | Lo:192.168.3.3/32 | +-----------+-----------+ eth1 | .3 | | 192.168.34.0/24 | eth0 | .4 +-----------+-----------+ | vy004 | | Lo:192.168.4.4/32 | +-----------+-----------+ eth1 | .1 | | 192.168.200.0/24 | ens224 | .200 +-----------+-----------+ | host200 | | | +-----------------------+
初期設定
IPv4アドレスとIPv6アドレスは付与済とします。vy001, vy002, vy003の間はOSPFで互いに経路を交換しているものとします。
動作確認 NAT環境のIPsec
レスポンダ(グローバルIPを持つ機器)側となるvy001の設定は以下の通りです。注意点はレスポンダである事を明示的に指定する事です。
[vy001:VyOS1.4] set vpn ipsec esp-group MyESPGroup proposal 1 encryption 'aes128' set vpn ipsec esp-group MyESPGroup proposal 1 hash 'sha1' set vpn ipsec ike-group MyIKEGroup proposal 1 dh-group '2' set vpn ipsec ike-group MyIKEGroup proposal 1 encryption 'aes128' set vpn ipsec ike-group MyIKEGroup proposal 1 hash 'sha1' set vpn ipsec site-to-site peer 200.0.23.3 authentication mode 'pre-shared-secret' set vpn ipsec site-to-site peer 200.0.23.3 authentication pre-shared-secret 'SomePreSharedKey' set vpn ipsec site-to-site peer 200.0.23.3 local-address '200.0.12.1' set vpn ipsec site-to-site peer 200.0.23.3 connection-type 'respond' set vpn ipsec site-to-site peer 200.0.23.3 ike-group 'MyIKEGroup' set vpn ipsec site-to-site peer 200.0.23.3 vti bind 'vti10' set vpn ipsec site-to-site peer 200.0.23.3 vti esp-group 'MyESPGroup'
イニシエータ(グローバルIPを持たない機器)側となるvy003の設定は以下の通りです。イニシエータである事を明示指定するだけでなく、idやremote-idにも注意が必要です。id, remote-idは送信元IPアドレスや宛先IPアドレスから自動的に設定されるのがVyattaの仕様ですが、NAT環境のようにid, remote-idが送信元IPアドレスや宛先IPアドレスと一致しない場合は明示的な指定が必要です。
[vy003:VyOS1.4] set vpn ipsec esp-group MyESPGroup proposal 1 encryption 'aes128' set vpn ipsec esp-group MyESPGroup proposal 1 hash 'sha1' set vpn ipsec ike-group MyIKEGroup proposal 1 dh-group '2' set vpn ipsec ike-group MyIKEGroup proposal 1 encryption 'aes128' set vpn ipsec ike-group MyIKEGroup proposal 1 hash 'sha1' set vpn ipsec site-to-site peer 200.0.12.1 authentication mode 'pre-shared-secret' set vpn ipsec site-to-site peer 200.0.12.1 authentication pre-shared-secret 'SomePreSharedKey' set vpn ipsec site-to-site peer 200.0.12.1 authentication id '200.0.23.3' set vpn ipsec site-to-site peer 200.0.12.1 authentication remote-id '200.0.12.1' set vpn ipsec site-to-site peer 200.0.12.1 local-address '192.168.34.4' set vpn ipsec site-to-site peer 200.0.12.1 connection-type 'initiate' set vpn ipsec site-to-site peer 200.0.12.1 ike-group 'MyIKEGroup' set vpn ipsec site-to-site peer 200.0.12.1 vti bind 'vti10' set vpn ipsec site-to-site peer 200.0.12.1 vti esp-group 'MyESPGroup'
ここまでの設定をすると、IKEとESPのネゴシエーションが開始されます。IKEのネゴシエーションに成功したかどうかを確認するには以下のコマンドを使用します。Stateがupとなっていれば正常です。
[vy001:VyOS1.4] vyos@vy001:~$ show vpn ike sa Peer ID / IP Local ID / IP ------------ ------------- 200.0.23.3 200.0.23.3 200.0.12.1 200.0.12.1 State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time ----- ------ ------- ---- --------- ----- ------ ------ up IKEv2 AES_CBC_128 HMAC_SHA1_96 MODP_1024 no 2620 0 vyos@vy001:~$ [vy004:VyOS1.4] vyos@vy004:~$ show vpn ike sa Peer ID / IP Local ID / IP ------------ ------------- 200.0.12.1 200.0.12.1 192.168.34.4 200.0.23.3 State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time ----- ------ ------- ---- --------- ----- ------ ------ up IKEv2 AES_CBC_128 HMAC_SHA1_96 MODP_1024 yes 2663 0 vyos@vy004:~$
ESPのネゴシエーションに成功したかどうかを確認するには以下のコマンドを使用します。Stateがupとなっていれば正常です。
[vy001:VyOS1.4] vyos@vy001:~$ show vpn ipsec sa Connection State Uptime Bytes In/Out Packets In/Out Remote address Remote ID Proposal ------------------- ------- -------- -------------- ---------------- ---------------- ----------- ------------------------ peer_200-0-23-3_vti up 44m6s 84B/84B 1/1 200.0.23.3 N/A AES_CBC_128/HMAC_SHA1_96 vyos@vy001:~$ [vy004:VyOS1.4] vyos@vy004:~$ show vpn ipsec sa Connection State Uptime Bytes In/Out Packets In/Out Remote address Remote ID Proposal ------------------- ------- -------- -------------- ---------------- ---------------- ----------- ------------------------ peer_200-0-12-1_vti up 45m35s 84B/84B 1/1 200.0.12.1 N/A AES_CBC_128/HMAC_SHA1_96 vyos@vy004:~$
トンネル越しのpingが成功する事を確認します。
[vy001:VyOS1.4] vyos@vy001:~$ ping 192.168.14.4 count 3 PING 192.168.14.4 (192.168.14.4) 56(84) bytes of data. 64 bytes from 192.168.14.4: icmp_seq=1 ttl=64 time=1.64 ms 64 bytes from 192.168.14.4: icmp_seq=2 ttl=64 time=2.14 ms 64 bytes from 192.168.14.4: icmp_seq=3 ttl=64 time=1.78 ms --- 192.168.14.4 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.644/1.854/2.135/0.206 ms vyos@vy001:~$
ルーティングを設定し、host100からhost200への疎通が可能である事を確認します。
[vy001:VyOS1.4] set protocols static route 192.168.200.0/24 next-hop 192.168.14.4 [vy004:VyOS1.4] set protocols static route 192.168.100.0/24 next-hop 192.168.14.1 [host100:RockyLinux8.4] [root@host100 ~]# ping -c 3 192.168.200.1 PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data. 64 bytes from 192.168.200.1: icmp_seq=1 ttl=63 time=2.15 ms 64 bytes from 192.168.200.1: icmp_seq=2 ttl=63 time=2.08 ms 64 bytes from 192.168.200.1: icmp_seq=3 ttl=63 time=1.76 ms --- 192.168.200.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 1.763/1.997/2.148/0.171 ms [root@host100 ~]#