Yamaha RTX ルータのIPsec設定 両拠点 固定IPアドレスCLI編

スポンサーリンク

Yamaha RTXで両拠点がグローバルIPを保有する場合のIPSec設定を紹介します。

もし、ネットワークに対する苦手意識の強い方は「IPsec設定 両拠点 固定IPアドレスGUI編」を参照ください。ただし、GUIによって生成されるconfigは不要設定が多いため、よっぽど苦手意識が強い場合を除きCLIによる設定をオススメします。

設定まとめ

トンネル操作

tunnelコマンドを使用するとトンネルに対する設定ができます。以下のようにtunnel select 1と入力するとtunnel1に対する設定モードに移行します。RTX810では、トンネルは1から6までの計6つを定義する事ができます。

同価格帯のNEC IXシリーズに比べると確立できるトンネルの数は少なめです。HUB拠点として使用する場合は、トンネル上限に抵触しないか購入前に注意しましょう。

# tunnel select 1
tunnel1# 

トンネルに対する設定を終える場合は、tunnel select noneと入力します。

tunnel1# tunnel select none
# 

定義したトンネルを有効にするか否かを指定できます。

# tunnel enable <トンネル番号>
# tunnel enable all

IKE関連

対向機器と接続するための最小限のIKEの設定はIPアドレスや事前共有鍵などです。ハッシュや暗号化アルゴリズムは、デフォルト設定を使用してYamaha RTX同士を接続するならば、設定を省略して差し支えございません。

tunnel select <トンネル番号>
  ipsec ike local address <ゲートウェイ番号> <自身のIPアドレス>
  ipsec ike remote address <ゲートウェイ番号> <対向のIPアドレス>
  ipsec ike pre-shared-key <ゲートウェイ番号> text <事前共有鍵>

ハッシュや暗号化アルゴリズムを明示的に指定するならば、以下のようなコマンドを使用します。設定省略時はsha256, 3des-cbc, modp1024になります。

tunnel select <トンネル番号>
  ipsec ike hash <ゲートウェイ番号> {md5|sha|sha256}
  ipsec ike encryption <ゲートウェイ番号> {des-cbc|3des-cbc|aes-cbc|aes256-cbc}
  ipsec ike group <ゲートウェイ番号> {modp768|modp1024|modp1536|modp2048}

IPSec関連

IPsecに関するパラメタ定義は以下の通りです。暗号化とハッシュを定義したポリシーIDを定義します。その後、「ipsec tunnel <ポリシーID>」コマンドで、「ポリシーID」と「トンネル番号」を紐づけます。

ipsec sa policy <ポリシーID> <ゲートウェイ番号> esp <暗号化アルゴリズム> <ハッシュアルゴリズム>
tunnel select <トンネル番号>
  ipsec tunnel <ポリシーID>

IKE keepalive

以下のコマンドでIKEによるkeepaliveを実行できる。必須の設定ではないものの、障害を素早く検出できるため実運用では投入するのが望ましい。また、障害検出時はログだけでなく、LEDランプでも異常を目視する事ができる。

ipsec ike keepalive use <ゲートウェイ番号> on heartbeat <interval> <count>

設定反映

IPsecを有効にし、設定を定期的に反映させるには、以下のコマンドを使用します。

ipsec use on
ipsec auto refresh on

動作確認

動作確認の構成

以下の環境で動作確認を行います。

+------------------+
|  RockyLinux 8.4  |
|     host010      |
+-------+----------+
 ens224 | .10
        |
        | 192.168.10.0/24
        | 
   lan1 | .1 
+-------+----------+ 
|  Yamaha RTX 810  | 
|       R10        |
+-------+----------+
   lan2 | .10
        |
        | 200.0.10.0/24
        |
   eth0 | .1 
+-------+----------+ 
|    VyOS 1.4      | 
|    Internet      |
+-------+----------+
   eth1 | .1
        |
        | 200.0.20.0/24
        |
   lan2 | .20
+-------+----------+ 
|  Yamaha RTX 810  | 
|       R20        |
+-------+----------+
   lan1 | .1 
        |
        | 192.168.20.0/24
        | 
 ens224 | .20
+-------+----------+
|  RockyLinux 8.4  |
|     host020      |
+------------------+

初期設定

初期設定はIPアドレスとデフォルトゲートウェイとNATのみです。

R10 : Yamaha RTX 810
ip route default gateway 200.0.10.1
ip lan1 address 192.168.10.1/24
ip lan2 address 200.0.10.10/24
ip lan2 nat descriptor 100 
nat descriptor type 100 masquerade
nat descriptor address outer 100 primary 
telnetd host lan
R20 : Yamaha RTX 810
ip route default gateway 200.0.20.1
ip lan1 address 192.168.20.1/24
ip lan2 address 200.0.20.20/24
ip lan2 nat descriptor 100 
nat descriptor type 100 masquerade
nat descriptor address outer 100 primary 
telnetd host lan
Internet : VyOS 1.4
set interfaces ethernet eth0 address '200.0.10.1/24'
set interfaces ethernet eth0 hw-id '00:50:56:90:36:24'
set interfaces ethernet eth1 address '200.0.20.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:90:06:1c'
set interfaces loopback lo
set service ssh disable-host-validation
set system config-management commit-revisions '100'
set system conntrack modules ftp
set system conntrack modules h323
set system conntrack modules nfs
set system conntrack modules pptp
set system conntrack modules sip
set system conntrack modules sqlnet
set system conntrack modules tftp
set system console device ttyS0 speed '115200'
set system host-name 'vyos'
set system login user admin authentication encrypted-password '$6$cl1DIDt8CHJnLXst$zNkGlajjlSDirfSVdmFEkVfkvj3rxjayuu1RfzvuJQ.rNzJlb3s995/1HZX91nvW83ZvINnGvXBG6Z.sWVE7W/'
set system login user vyos authentication encrypted-password '$6$BLBE.ChYBI4ynui8$u2B.sTlyz1d.5GEjLyQKQmNRPN3kDHb3ynAzolORLLGOYe3up4u3vNg93QWk1DkOBbRNgkJJyYYVkrMofOFgw1'
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'

動作確認 (1) IPsec確立

R10とR20の間で、IPsecトンネルを確立します。R10とR20で、IKEおよびIPsecのハッシュと暗号化アルゴリズムなどが一致するように設定してください。

[R10:RTX810]
tunnel select 1
 ipsec tunnel 1
  ipsec sa policy 1 1 esp 3des-cbc md5-hmac
  ipsec ike local address 1 200.0.10.10
  ipsec ike pre-shared-key 1 text P@ssw0rd
  ipsec ike remote address 1 200.0.20.20
 tunnel enable 1
tunnel select none
ipsec use on
ipsec auto refresh on
[R20:RTX810]
tunnel select 1
 ipsec tunnel 1
  ipsec sa policy 1 1 esp 3des-cbc md5-hmac
  ipsec ike local address 1 200.0.20.20
  ipsec ike pre-shared-key 1 text P@ssw0rd
  ipsec ike remote address 1 200.0.10.10
 tunnel enable 1
 tunnel select none
ipsec use on
ipsec auto refresh on

IPsecトンネルの確立に成功しているならば、show ipsec saコマンドを実行すると、以下のような何らかの出力が得られます。もし、何も出力されないならば、IPsecトンネルが確立されていない事を表します。

[R10:RTX810]
# show ipsec sa 
Total: isakmp:2 send:2 recv:2

sa   sgw isakmp connection   dir  life[s] remote-id
-----------------------------------------------------------------------------
1     1    -    isakmp       -    24974   200.0.20.20
2     1    -    isakmp       -    24974   200.0.20.20
3     1    1    tun[001]esp  send 24975   200.0.20.20
4     1    1    tun[001]esp  recv 24975   200.0.20.20
5     1    1    tun[001]esp  send 24976   200.0.20.20
6     1    1    tun[001]esp  recv 24976   200.0.20.20

# 
# 
# 
# show ipsec sa gateway 1 detail 
SA[1] 寿命: 24960秒
自分側の識別子: 200.0.10.10
相手側の識別子: 200.0.20.20
プロトコル: IKE
アルゴリズム: 3DES-CBC, SHA-1, MODP 1024bit
SPI: 7b 4e 7c 7a 36 50 15 e1 af 7a 45 2c 53 c5 2e 7c 
鍵 : ** ** ** ** **  (confidential)   ** ** ** ** **
----------------------------------------------------
SA[2] 寿命: 24960秒

 <omitted>

# 

動作確認 (2) static routeによる疎通

IPsecを設定しただけれは疎通可能になりません。疎通可能になるようにルーティングを設定します。static routeの設定例は以下の通りです。

[R10:RTX810]
ip route 192.168.20.0/24 gateway tunnel 1
[R20:RTX810]
ip route 192.168.10.0/24 gateway tunnel 1

host010とhost020間で疎通可能である事を確認します。

[host010:RockyLinux8.4]
[root@host010 ‾]# ping -c 3 192.168.20.20 
PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data.
64 bytes from 192.168.20.20: icmp_seq=1 ttl=62 time=1.37 ms
64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.53 ms
64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.53 ms

--- 192.168.20.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.373/1.477/1.531/0.073 ms
[root@host010 ‾]# 

次の検証シナリオの都合上、static routeを削除します。

[R10:RTX810]
no ip route 192.168.20.0/24 gateway tunnel 1
[R20:RTX810]
no ip route 192.168.10.0/24 gateway tunnel 1

動作確認 (3) OSPFによる疎通

管理するprefixが多い場合はstatic routeによる運用は人的リソース制約の観点で困難な事もあるでしょう。そこで、OSPFを使ったダイナミックルーティングの設定例を紹介します。

OSPFの設定例は以下の通りです。設定反映には、ospf configure refreshコマンドが必要である事に注意しましょう。

[R10:RTX810]
ip lan1 ospf area backbone passive
tunnel select 1
  ip tunnel ospf area backbone
  tunnel select none
ospf use on
ospf area backbone
ospf configure refresh 
[R20:RTX810]
ip lan1 ospf area backbone passive
tunnel select 1
  ip tunnel ospf area backbone
  tunnel select none
ospf use on
ospf area backbone
ospf configure refresh 

OSPF interfaceを確認します。特段の設定なしに、tunnel interfaceはPOINT-TO-POINTとして扱われるようです。Yamaha RTXの場合はinterface typeの明示指定は必要ないですが、この辺りは機器やバージョンによってデフォルトの挙動が異なりますので注意深く観察しましょう。

[R10:RTX810]
# show status ospf interface 
LAN1: Area backbone
  Router ID: 192.168.10.1,  Interface address: 192.168.10.1/24
  Interface type: BROADCAST  cost=1
  Interface state: DR  priority=1
  Designated router ID: 192.168.10.1,  IP address: 192.168.10.1
TUNNEL[1]: Area backbone
  Router ID: 192.168.10.1,  Interface address: unnumbered
  Interface type: POINT-TO-POINT  cost=1562
  Interface state: POINT_TO_POINT

OSPFによって経路を交換できている事を確認します。

[R10:RTX810]
# show ip route 
宛先ネットワーク    ゲートウェイ     インタフェース  種別  付加情報
default             200.0.10.1             LAN2    static  
172.31.0.2/32       -                 TUNNEL[1]    static  
192.168.10.0/24     192.168.10.1           LAN1  implicit  
192.168.20.0/24     192.168.20.1      TUNNEL[1]      OSPF     cost=1563 
200.0.10.0/24       200.0.10.10            LAN2  implicit  

host010とhost020間で疎通可能である事を確認します。

[host010:RockyLinux8.4]
[root@host010 ‾]# ping -c 3 192.168.20.20 
PING 192.168.20.20 (192.168.20.20) 56(84) bytes of data.
64 bytes from 192.168.20.20: icmp_seq=1 ttl=62 time=1.77 ms
64 bytes from 192.168.20.20: icmp_seq=2 ttl=62 time=1.34 ms
64 bytes from 192.168.20.20: icmp_seq=3 ttl=62 time=1.26 ms

--- 192.168.20.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.263/1.455/1.765/0.223 ms
[root@host010 ‾]# 

補足説明

デバッグ手法

正常にIPsecが確立されている場合は、isakmpおよびtun[00X]espというコネクションが見られます。

[R10:RTX810]
# show ipsec sa 
Total: isakmp:2 send:2 recv:2

sa   sgw isakmp connection   dir  life[s] remote-id
-----------------------------------------------------------------------------
1     1    -    isakmp       -    24974   200.0.20.20
2     1    -    isakmp       -    24974   200.0.20.20
3     1    1    tun[001]esp  send 24975   200.0.20.20
4     1    1    tun[001]esp  recv 24975   200.0.20.20
5     1    1    tun[001]esp  send 24976   200.0.20.20
6     1    1    tun[001]esp  recv 24976   200.0.20.20

# 

以下のように何も出力されない場合は、isakmpすら試みてない事を表します。IKEによる鍵交換をしようとしていない状態です。

# show ipsec sa 
# 

以下のようにisakmpのコネクションが1つのみ見られるのは、鍵交換を試みたものの失敗している事を表します。なお、IKEに成功してIPsecのプロポーザルが不一致なのか、それ以前にIKEで失敗しているのかは、このshowコマンドからは判断できません。

tunnel1# show ipsec sa 
Total: isakmp:1 send:0 recv:0

sa   sgw isakmp connection   dir  life[s] remote-id
-----------------------------------------------------------------------------
1     1    -    isakmp       -    28793   200.0.20.20

tunnel1# 

より詳細な情報を得るには、syslogをdebugにしてそのログを参照する必要があります。以下のコマンドでsyslogへのdebug出力を有効にします。

syslog debug on

show logでデバッグ情報の閲覧が可能です。以下のような出力ならば、IPsecのプロポーザル不一致である事が分かります。

# show log 
2021/11/06 19:23:42: [IKE] respond IPsec phase to 200.0.20.20
2021/11/06 19:23:42: [IKE] add IPsec context [151] 5481624db9bedf45 f355c049
2021/11/06 19:23:42: [IKE] no proposal chosen []
2021/11/06 19:23:42: [IKE] initiate info exchange (notification)
2021/11/06 19:23:43: [IKE] [144] retransmit to 200.0.20.20 (count = 8)
2021/11/06 19:23:43: [IKE] inactivate context [151] 5481624db9bedf45 f355c049

 <omitted>

2021/11/06 19:24:02: [IKE] initiate info exchange (notification)
2021/11/06 19:24:03: [IKE] [144] retransmit to 200.0.20.20 (count = 6)
2021/11/06 19:24:03: [IKE] inactivate context [157] 5481624db9bedf45 f355c049
2021/11/06 19:24:03: [IKE] delete IPsec context [157] 5481624db9bedf45 f355c049
2021/11/06 19:24:03: [IKE] SPI 5481624db9bedf45193b9a8bd4de8f4b
2021/11/06 19:24:03: [IKE] no proposal chosen : no message
2021/11/06 19:24:15: [IKE] respond IPsec phase to 200.0.20.20
2021/11/06 19:24:15: [IKE] add IPsec context [160] 5481624db9bedf45 f355c049
2021/11/06 19:24:15: [IKE] no proposal chosen []
2021/11/06 19:24:15: [IKE] initiate info exchange (notification)

masquerade設定

公式資料「IPsecを使用したVPN拠点間接続(2拠点) : コマンド設定」によると、ESP, udp500, udp4500に対してstaticなNAT masqueradeの設定が必要と書かれています。具体的には以下のような設定です。

nat descriptor type 1000 masquerade
nat descriptor masquerade static 1000 1 192.168.1.1 udp 500
nat descriptor masquerade static 1000 2 192.168.1.1 esp
nat descriptor masquerade static 1000 3 192.168.1.1 udp 4500

ルータによっては自身へのパケットをmasqueradeしないと受信できない事もあります(例:NEC IX)。RTX810 Rev.11.01.34ではmasqueradeせずにIPsecを確立できましたので、公式ドキュメントは旧バージョン仕様に基づく情報かもしれません。

フィルタ設定

公式資料「IPsecを使用したVPN拠点間接続(2拠点) : コマンド設定」によると、ESP, udp500, udp4500のフィルタ解除設定が必要との記載があります。具体的には以下のような設定です。

ip filter 200100 pass * 192.168.1.1 udp * 500
ip filter 200101 pass * 192.168.1.1 esp * *
ip filter 200102 pass * 192.168.1.1 udp * 4500

確かにIPsecはESP, udp500, udp4500の許可が必要ですが、RTX810 Rev.11.01.34は自身へのパケットはfilterの対象外になるため、明示的な許可設定は必要ないと思われます。もしかしたら、公式ドキュメントは旧バージョン仕様に基づく情報かもしれません。

タイトルとURLをコピーしました