タグ別アーカイブ: ix2015

IX2015同士でIPアドレスを決め打ちしたIPsecを張る

1. IPアドレス決め打ちのIPsecを対向で張る

最近増えてきたIX2015。これまでは片側のIPアドレスのみを指定した IKE-IPsecだったんだけれど、お互いが固定IPアドレスを払い出されるような環境だとお互いIPアドレス決め打ちのほうがセキュリティ的に良かったりする。

なのでコレを試してみた。

2. コンフィグ

コレまで使ってきたコンフィグにちょっと手直しをするだけで行けた。設定事例集をみるともっとシンプルに出来るみたいなので、ここではあくまで自分流のメモということで。

ルータ1 (こいつのグローバルは203.0.113.1、ローカルは192.0.2.1/28、セグメント名はs1)


ike proposal ike-prop1 encryption 3des hash sha lifetime 3600
ike policy ike-s2 peer 203.0.113.2 key random mode aggressive ike-prop1
ike commit-bit ike-s2
ike keepalive ike-s2 10 3
ike remote-id ike-s2 keyid s2keyid

!

ipsec autokey-proposal ipsec-prop1 esp-3des esp-sha lifetime time 3600


ipsec autokey-map ipsec-s2 sec-list peer 203.0.113.2 ipsec-prop1
ipsec commit-bit ipsec-s2
ipsec local-id ipsec-s2 192.0.2.0/28
ipsec remote-id ipsec-s2 192.0.2.16/28

interface Tunnel0.0
description s2vpn
tunnel mode ipsec
ip unnumbered FastEthernet1/0.0
ip tcp adjust-mss auto
ipsec policy tunnel ipsec-s2out
no shutdown

ルータ2(こいつのグローバルは203.0.113.2、ローカルは192.0.2.17/28、セグメント名はs2)


ike proposal ike-prop1 encryption 3des hash sha lifetime 3600
ike policy ike-s1 peer 203.0.113.1 key random mode aggressive ike-prop1
ike keepalive ike-s1 30 6
ike local-id ike-s1 keyid s2keyid
!
ipsec autokey-proposal ipsec-prop1 esp-3des esp-sha lifetime time 3600
ipsec autokey-map ipsec-s1 sec-list peer 203.0.113.1 ipsec-prop1
ipsec local-id ipsec-s1 192.0.2.16/28
ipsec remote-id ipsec-s1 192.0.2.0/28

interface Tunnel0.0
tunnel mode ipsec
ip unnumbered FastEthernet1/0.0
ip mtu 1382
ip tcp adjust-mss auto
ipsec policy tunnel ipsec-s1 out
no shutdown


ix2015同士でOSPFをしゃべらせたけどうまく経路情報を交換出来なかった様子

ix2015同士でOSPFをしゃべらせたけどうまく経路情報を交換出来なかった様子。

今回の状況は、vpnのハブになっているルータが一台と、そこにつなぎに行っているルータが複数台ある。

このとき新規に追加されたルータがospfにて経路情報を取得できない、広告できない、という状況。

rt3(config)# show ip ospf interface
 Interface           IP address      Area       Type      Cost  State    Nbrs
 FastEthernet1/0.0   192.168.52.252  0          BROADCAST 1     BACKUP   1/1
 Tunnel0.0           - UNNUMBERED -  0          P-to-P    10    P-to-P   1/1
 Tunnel1.0           - UNNUMBERED -  0          P-to-P    10    P-to-P   1/1

 rt3(config)# show ip ospf neighbor
 Neighbor ID     Pri State      Age IP address      Uptime    Interface
 192.168.1.254  1   FULL/DR    3   192.168.1.254  0:17:24   FastEthernet1/0.0
 192.168.2.254  1   FULL/OTHER 2   192.168.2.254  0:17:33   Tunnel0.0
 192.168.3.254 1   EXSTART    5   192.168.3.254 0:00:14   Tunnel1.0

今回の件では、192.168.3.254のルータを新たに接続したが、このix2015がospfをうまくしゃべれていない様子。
show ip ospf neighborで表示されるStateがEXSTARTになっている。
さっくりググったらそれらしい情報が出てきた。

OSPF 隣接ルータが exstart/exchange state のままになる

この問題が最もよく発生するのは、シスコのルータと他のベンダーのルータとの間で OSPF を実行しようとしたときです。 近隣ルータのインターフェイスの Maximum Transmission Unit(MTU; 最大伝送ユニット)設定が一致していないときに、問題が発生します。 MTU が大きい側のルータからネイバールータの MTU 設定よりも大きいパケットが送信されると、ネイバールータではそのパケットが無視されます。

OSPFネイバが Exstart/Exchange 状態でスタックしている理由 – IP : IP ルーティング – Cisco Systems

どうやらMTUを設定せよ、とのことらしい。

確認してみると今回設定されたルータのトンネルインタフェースにはmtuが設定されていなかった。

コレを設定すると途端にうまくospfをしゃべってくれるようになった。

ix2015でIPSecを対向にトンネルモードで張るときの基本コンフィグ

ix2015でIPSecを対向にトンネルモードで張るときの基本コンフィグ。
トンネルが増えてくると名前付けの規則、ルーチン化されたコンフィグの流しが絶対必要なのでその例として。
この例ではスター型のトンネルを想定。フルメッシュとか所々でよそよそがつなぐ時にはそれぞれのセグメントの名称を二つ含める必要がある。(第三オクテットの小さい順に名前を並べるとか)

事前条件は下記の通り。該当する名称を置換して利用。

今回の状況は固定IPの待ち受け(?)側でありIPアドレスはxxx.xxx.xxx.xxx、動的IPのコネクションを張りに行く側を想定。
それぞれのIXルータはL3で橋渡しをしてやり、それをOSPFに乗せて情報交換する。
待ち受け側のネットワーク名称はsegment1、張りに行く側のネットワーク名称はsegment2、
segment1は192.168.11.0/24、segment2は192.168.22.0/24とする。
segment1のIXルータは192.168.11.1/24、segment2のIXルータは192.168.22.2/24とする。
待ち受け側のトンネルインタフェースはTunnel0.0、張りに行く側のトンネルインターフェースもTunnel0.0
カギ交換はIKEの事前共有鍵。IKEのセションIDはsegment2-vpnカギ自体は文字列”secret”。

それぞれのIXルータのFastEthernet1/0.0がLAN側への出入り口。
OSPFのrouter-idはLAN側でのIXルータに割り振られたIPアドレスとする。

 ike proposal ike-prop1 encryption 3des hash sha lifetime 3600

ike policy ike-segment2 peer any key secret mode aggressive ike-prop1
 ike commit-bit ike-segment2
 ike keepalive ike-segment2 10 3
 ike remote-id ike-segment2 keyid segment2-vpn

ipsec autokey-proposal ipsec-prop1 esp-3des esp-sha lifetime time 3600

ipsec dynamic-map ipsec-segment2 sec-list ipsec-prop1 ike ike-segment2
 ipsec commit-bit ipsec-segment2
 ipsec local-id ipsec-segment2 192.168.11.0/24
 ipsec remote-id ipsec-segment 192.168.22.0/24

ip router ospf 1
 router-id 192.168.11.1
 area 0
 network Tunnel0.0 area 0

watch-group host 10
 event 22 ip unreach-host 192.168.22.1 Tunnel0.0 source FastEthernet1/0.0

interface Tunnel0.0
 description segment1-segment2
 tunnel mode ipsec
 ip unnumbered FastEthernet1/0.0
 ip tcp adjust-mss auto
 ipsec policy tunnel ipsec-segment2 out
 no shutdown
 

張りに行く側segment2

 ike proposal ike-prop1 encryption 3des hash sha lifetime 3600

 

ike policy ike-segment1 peer xxx.xxx.xxx.xxx key secret mode aggressive ike-prop1
 ike keepalive ike-segment1 30 6
 ike local-id ike-segment1 keyid segment2-vpn

ipsec autokey-proposal ipsec-prop1 esp-3des esp-sha lifetime time 3600

ipsec autokey-map ipsec-segment1 sec-list peer xxx.xxx.xxx.xxx ipsec-prop1
 ipsec local-id ipsec-segment1 192.168.22.0/24
 ipsec remote-id ipsec-segment1 192.168.11.0/24

ip router ospf 1
 router-id 192.168.22.2
 passive-interface FastEthernet1/0.0
 area 0
 network Tunnel0.0 area 0
 network FastEthernet1/0.0 area 0

interface Tunnel0.0
 description segment1-segment2
 tunnel mode ipsec
 ip unnumbered FastEthernet1/0.0
 ip mtu 1382
 ip tcp adjust-mss auto
 ipsec policy tunnel ipsec-segment1 out
 no shutdown
 

ix2015で効率よくコンフィグのバックアップを取る方法

0. 面倒なコンフィグ管理

現在我が家では複数台のルータを運用している。特にUniversi IXシリーズは安いのでホイホイ買ってしまって、VPN先まで自分が管理しているせいで管轄ルータの台数がそれなりに増えてきちゃった。

おおよそ、外側のIX2015とかのコンフィグはいじることがないのだけれど、内側のIX2015のコンフィグはちょくちょく書き換える事になる。

VPNの設定などで色々と大きくなってきたコンフィグなんだけど、そうなってくるとコンフィグの管理が重要になってくる。

特に、もうすでに複数台のルータとVPNを結んでいる状態で、メインのVPN拠点ルータのコンフィグが飛んでしまうとかなり困った状態になってしまう。なのでバックアップが必要だ。

また、VPN上のルーティングのあたりは、まだまだ実験段階だったりする項目もあったりして、コンフィグの世代管理、過去のコンフィグに遡ったりもしたい。

バックアップ+世代管理、となると純粋にSubversionを利用すれば万事オッケーなんだけれど、リポジトリにコミットをするのが意外に大変だったりする。

というのも基本的にコンフィグは、telnetでログインした後、show running-configなどで取得してそれをテキストに貼り付けて保存、とすることで保存されるからだ。

とくにこのコピーが面倒くさい。複数のページにまたがっているときにはtelnet越しに何ページかに分けてコピーする必要があり、途中の行を飛ばしていないか、重複しないか、などヘンに気を遣ってしまう。

1. tftp

と、さて、どうやらIX2015ではtftp機能を利用することで、コマンド一発でコンフィグが保存できるらしい。

Trivial File Transfer Protocol(トリビアル ファイル トランスファー プロトコル、TFTP)は、UDPを用いてコンピュータ間でファイルを転送するためのプロトコルである。FTPに比べて軽量・単純なプロトコルである。認証機能が無いためにユーザ名やパスワードを必要としない。ポート番号69をデフォルトとして使用する。

Trivial File Transfer Protocol - Wikipedia

Universi のIXシリーズに限らず、他社製のルータでもtftpを通じてファームのアップデートやコンフィグの取得、送信が出来る機種は多かったりする。

このIX2015でもtftpを通じてバックアップをとれるようなので試してみた。

2. FreeBSDでtftpdを立ててソコへコンフィグを置こうとしてみる

FreeBSDでtftpのサーバを立ててみる。最近のサーバ、デーモンは基本的には独立して動くんだけれど、tftpはinetdで動かすのが主流らしい。

自分も主流に倣ってinetdで動かしてみる。

FreeBSDでtftpdを動かすのはとても簡単らしい。

    1. /etc/inetdを編集して以下の行を追加
tftp            dgram   udp     wait    root    /usr/libexec/tftpd
tftpd -s /path/to/tftpboot
      1. /path/to/tftprootディレクトリを作成。これを忘れると起動しない、うまく動かない。
      2. /etc/rc.dにinetd_enable=”YES”を追記
      3. /etc/rc.d/inetd restartを実行 (kill -HUP inetdpid でも可)

まずはtftpでstartup-configの転送を試してみる

rt8(config)# tftp put startup-config  192.168.xxx.yyy:hogehoge
TFTP error - Unknown Error

なにやらエラーが出たみたい。
windowsでtftpサーバを立てて試してみる

rt8(config)# tftp put startup-config  192.168.xxx.zzz:hoge
TFTP transfer complete, 4885 bytes, MD5 = cfc64755de8076f8eab5e820a1542f13

うまくいけた。何が原因なんだろう。
サーバのログを漁ってみる。
サーバはFreeBSD + inetd + /usr/libexec/tftpd。ログはxferlogに出てた。

Jun 17 17:34:48 xxxx tftpd[98211]: 192.168.xxx.yyy: write request for hogehoge: error 102
Jun 17 17:36:23 xxxx tftpd[98215]: 192.168.xxx.yyy: write request for statup-config: error 102

どうやらリクエストは飛んできてるらしいけどエラーらしい。
man tftpdを見てみる

TFTPD(8)                FreeBSD System Manager's Manual               TFTPD(8)

NAME
     tftpd — Internet Trivial File Transfer Protocol server

(中略)

    -w      Allow write requests to create new files.  By default tftpd
             requires that the file specified in a write request exist.  Note
             that this only works in directories writable by the user speci‐
             fied with -u option

     -W      As -w but append a YYYYMMDD.nn sequence number to the end of the
             filename.  Note that the string YYYYMMDD can be changed with the
             -F option.

どうやら-wオプション、または-Wオプションをつけると良いらしい。-Wだとファイル名の末尾に日付とかを自動でつけるようになるらしい。なるほど。
inetd.confを書き換えてみる

ee /etc/inetd.conf

該当する行で

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -w -s /tftproot

inetdを再起動

%sudo /etc/rc.d/inetd restart
Stopping inetd.
Starting inetd.

再度転送してやる

rt8(config)# tftp put startup-config  192.168.xxx.yyy:hogehogeo.
TFTP transfer complete, 4885 bytes, MD5 = cfc64755de8076f8eab5e820a1542f13

うまくいった!