VPNルータの相互接続と課題
それではBrocade Vyatta vRouterと、市販されるVPNルータによるIPSecでのサイト間VPNについてみていきます。今回の相互接続には、市販されるVPNルータにBuffalo社VR-S1000を使用しました。
結論からいえば「繋がりませんでした」なのですが、その状況をログから確認しましょう(図3)。
実験環境でBrocade Vyatta vRouterのIKE/ESP/IPSecパラメータ設定を可能な限り試してみましたが、結論は変わりませんでした。IPSecでやりとりされるペイロード形式が不一致のためエラー終了していることがログから推測されますが、この部分が強くソフトウェア実装に依存していると推測されるため解決には至りませんでした(※Vyatta/VyOSで使われているソフトウェア実装に変更を入れる手もありましたが……)。
筆者が最初にIPSecを使ったのは1990年代後半。その頃も「異機種間での相互接続」に課題を感じた業界団体や有志により多数の相互接続実験が行われました。記憶を辿ると、「まだこういった問題はあるか…」という気持ちがよみがえってきます。
このように、VPNなどの異機種間の相互接続を行う際には、事前検証などを十分に行っておく必要があるのです。前述のIDCフロンティア社が公開する「VyattaでのIPsecサイト間VPN接続手順書」や「VyOSでのIPsecサイト間VPN接続ガイド」は、とても貴重な情報源なのです。
少々脱線しますが相互接続の課題以外にも、Brocade Vyatta vRouterとVyOSに関係するセキュリティ脆弱性が最近報告されています。セキュリティ脆弱性と修正報告は、GNU Bash(Shellshock)脆弱性とOpenSSLの脆弱性に関する少々クリティカルな問題なので、可能な限り最新のバージョン(Brocade Vyatta vRouter 6.7R2以降、VyOS 1.0.5以降)を使用しましょう。
さて気を取り直して、つぎにプライベートクラウドをBrocade Vyatta vRouterでIPSecサイト間接続するVPN設定についてみていきましょう(参考: http://brocade.com/5400documentation / VPN_Site-to-Site IPsec VPN) 。
詳細は割愛しますが、IPSecサイト間VPN設定の基本的な考え方は4つです。「IKE/ESPの事前準備」「IPSecサイト間のピア設定」「IPSecサイト間の共有鍵を設定」「IPSecトンネルを通るネットワーク範囲を設定」の4点です。このVPN設定では、いずれのIPSecサイトでもBrocade Vyatta vRouterやVyOSはグローバルIPv4アドレスをインターフェースに設定します。
基本的にはこれで設定終了ですが、図6のようにIPSsecのESPトンネルモードによるパケットサイズ減少に対処するため、TCP-MSS(Maximum Segment Size)への対処も頭の片隅に入れておいてください。
設定例は図7のようになりますが、読者の皆様の環境に合わせて変更してお使いください(※うまく動かない場合には、いろいろと試行錯誤してみてください)。
$ configure # set policy route TCP-MSS1386-ETH0 rule 1 destination address 10.20.20.0/24 # set policy route TCP-MSS1386-ETH0 rule 1 tcp flags SYN # set policy route TCP-MSS1386-ETH0 rule 1 protocol tcp # set policy route TCP-MSS1386-ETH0 rule 1 set tcp-mss 1386 # set interfaces ethernet eth0 policy route TCP-MSS1386-ETH0 # commit # save
ここでは「IPSecトンネルの対向側のIPアドレス範囲でありTCPフラグがSYNのときはTCP-MSSを1386バイトに変更する」設定がなされています。"policy route"コマンドのパラメータには、送信元IPアドレス範囲も設定可能なので、こちらも読者の皆様の環境や運用ポリシーに合わせて変更してお使いください。
さて、最後にマニュアルにないIPSec設定についてみていきましょう。