Vyatta(VyOS) IPsec設定 NAT併用編

スポンサーリンク

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で互いに経路を交換しているものとします。

host100 : Rocky Linux 8.4
[root@host100 ~]# ip address 

 <omitted>

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8e:96:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
    inet6 2001:db8:100::100/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::8813:7d0:ffd3:2c04/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
host200 : Rocky Linux 8.4
[root@host200 ~]# ip address 

 <omitted>

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8e:83:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.200/24 brd 192.168.200.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
    inet6 2001:db8:200::200/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::5fb3:768b:ed49:2f24/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
vy001 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.100.1/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:74:ec'
set interfaces ethernet eth1 address '200.0.12.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:3a:92'
set interfaces loopback lo address '200.1.1.1/32'
set protocols ospf area 0 network '200.0.12.0/24'
set protocols ospf area 0 network '200.1.1.1/32'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy001'
set system login user vyos authentication encrypted-password '$6$zYTPVWgiXCYwqR4k$VP3ph1IH9VU6eJdSfnfWzKtfobXlS2qXd4YNgYWPKvWoDPdxlgEqP78IvHixH52X7DAtt5blGjTX97eXxVZYb0'
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vy002 : VyOS 1.4
set interfaces ethernet eth0 address '200.0.12.2/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:45:5e'
set interfaces ethernet eth1 address '200.0.23.2/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:5e:c2'
set interfaces loopback lo address '200.2.2.2/32'
set protocols ospf area 0 network '200.0.12.0/24'
set protocols ospf area 0 network '200.0.23.0/24'
set protocols ospf area 0 network '200.2.2.2/32'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy002'
set system login user vyos authentication encrypted-password '$6$/asgxjH0KMjOXjpU$KW3GLcvtbyNl8o7/KNAvp0XFLq4OQtICnptLCfaDSlaWPbdGwjYvnb8qlYuOm6qNymwh7OApA2ew48v8F3wJp/'
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vy003 : VyOS 1.4
set interfaces ethernet eth0 address '200.0.23.3/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:01:93'
set interfaces ethernet eth1 address '192.168.34.3/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:fd:95'
set interfaces loopback lo address '192.168.3.3/32'
set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '0.0.0.0/0'
set nat source rule 100 translation address '200.0.23.3'
set protocols ospf area 0 network '200.0.23.0/24'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy003'
set system login user vyos authentication encrypted-password '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vy004 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.34.4/24'
set interfaces ethernet eth0 hw-id '00:50:56:90:56:3c'
set interfaces ethernet eth1 address '192.168.200.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:90:a2:07'
set interfaces loopback lo address '192.168.4.4/32'
set protocols static route 0.0.0.0/0 next-hop 192.168.34.3
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy004'
set system login user vyos authentication encrypted-password '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

動作確認 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 ~]# 
タイトルとURLをコピーしました