3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

YAMAHA RTX1100で動的IPマスカレード+静的NAT+IPフィルタをしてみた

(Linux)CentOSでちょっとトリッキーなNATルータを構築してみたに似たようなネットワークをRTXルータを使って構築することにしました。

上記の記事の時との違いは、ルーターが静的NATだけでなく、IPマスカレード(NAPT)+DHCPの機能を提供します。

また、インターネット側への通信ですが、ネットワークBからはping,http,https,dnsのみ許可すると共に、ネットワークA側への通信(DNS以外)は許可しない設定とします。

静的NAT+IPマスカレードの設定

まずは静的NAT+IPマスカレードの設定ですが、以下のようにしました。

ip routing on

ip route default gateway 192.168.0.2

ip lan1 address 192.168.1.1/24

ip lan3 address 192.168.0.1/24

ip lan3 nat descriptor 1

↓静的NATとIPマスカレード変換

nat descriptor type 1 masquerade

↓LAN3のIPを指定(指定したIPがIPマスカレードとして使われる)

nat descriptor address outer 1 primary (もしくは192.168.0.1)

↓NAT、NAPT対象となるアドレス。autoにすると、そのサブネット内すべて

nat descriptor address inner 1 auto (もしくは 192.168.0.1-192.168.0.254)

↓静的NATエントリ(192.168.0.120=192.168.1.10~192.168.0.123=192.168.1.13となる)

nat descriptor static 1 1 192.168.0.120=192.168.1.10 4

ポイントとしては、NATディスクリプタのtypeは masquerade とします。(動的静的NATだけの時はnat ,動的静的NAT+NAPTの時は、nat-masqueradeを指定)

そして、NATディスクリプタの外側のIPを外側のLANインターフェイスのIPとします。

後は静的NATを設定します。ここで設定したIP以外のホストはNAPTとして 192.168.0.1 のIPで外側にアクセスに行くわけですね。

なお、静的NATをさらに追加したい時は以下のように outer にIPアドレス追加、NATエントリに定義追加をします。

nat descriptor static 1 新たなNATテーブル番号 外側IP=内側IP 1

NATテーブルを確認するには以下のコマンドが使えます。IPマスカレードの変換テーブルも見れます。

show nat descriptor address

参照NATディスクリプタ : 1, 適用インタフェース : LAN3(1)

外側アドレス(Outer) 内側アドレス(Inner) TTL(秒)

192.168.0.120 192.168.1.10 static

192.168.0.121 192.168.1.11 static

192.168.0.122 192.168.1.12 static

192.168.0.123 192.168.1.13 static

Masqueradeテーブル

外側アドレス: 192.168.0.150 ポート範囲=60000-64095 5個使用中

プロトコル 内側アドレス 宛先 マスカレード TTL(秒)

UDP 192.168.1.15.40815 74.125.31.104.41836 60039 899

UDP 192.168.1.15.40815 74.125.31.104.40899 60039 678

UDP 192.168.1.15.40815 74.125.31.104.41732 60039 678

TCP 192.168.1.23.38581 74.125.31.104.7009 60038 726

UDP 192.168.1.23.52451 74.125.31.104.41829 60030 665

ハマッたのは nat descriptor address outer の設定でした。

当初以下のようにしてました。

nat descriptor address outer 1 192.168.0.150 192.168.0.120-192.168.0.123

nat descriptor address inner 1 auto

↓静的NATエントリ(192.168.0.120=192.168.1.10~192.168.0.123=192.168.1.13となる)

nat descriptor static 1 1 192.168.0.120=192.168.1.10 4

outerに静的NATの外側IPを列挙してたのです。

outerにNATの外側IPを列挙するのは、nat descriptor type に nat を指定した時だけのようです。

IPマスカレードを使うときは、LANインターフェイス側のIP(primary)を指定する必要があるようです。

IPマスカレード+静的NATの設定はこれでOKなんですが、IPマスカレード設定後、外側(上記図のネットワークA)から、RTXにtelnetでの操作ができなくなりました。

LAN3のIPアドレスpingを打っても返りません。

仕様なのかどうかわかりませんが、LAN3のIPアドレスを静的NATでLAN1のIPと結びつけたら、pingtelnetができるようになりました。

こんな感じです。

nat descriptor static 1 1 192.168.0.120=192.168.1.10 4

↓静的NATエントリ2(外側からTELNETするため)

nat descriptor static 1 2 192.168.0.119=192.168.1.1 1

なおIPマスカレードを使わず、静的NATだけ使う場合はouter、innerのIPはLANインターフェイスとは違うIPを指定します。(outerはNATの外側IPの一つ、innerはNATの内側IPの一つを指定)

以下のような感じです。

ip lan1 address 192.168.1.1/24

ip lan3 address 192.168.0.1/24

ip lan3 nat descriptor 1

nat descriptor type 1 nat

nat descriptor address outer 1 192.168.0.100

nat descriptor address inner 1 192.168.1.64

nat descriptor static 1 1 192.168.0.100=192.168.1.64 3

これで以下のような静的NATが定義されます。

192.168.0.100=192.168.1.64

192.168.0.101=192.168.1.65

192.168.0.102=192.168.1.66

DHCPの設定

次に、DHCPの設定です。

これは簡単で以下のようにするとOKでした。

DHCPサーバとして動作させる(relayを指定するとDHCPリレーエージェントとして動作)

dhcp service server

↓払出すIPスコープ定義 48時間リースする

dhcp scope 1 192.168.1.15-192.168.1.50/24 gateway 192.168.1.1 expire 48:00

DNSも配信するように以下の設定をします。

DNSリカーシブサーバで動作(DNSサーバとクライアントとの間に入り、DNSパケット中継。DHCPがONなら、DHCPクライアントにDNSサーバのIPを配信)

dns service recursive

DNSサーバの指定

dns server 192.168.0.11 192.168.0.12

DHCP上記DNSの設定を取得すると、必ず、ルータの内側IPもDNSサーバとして設定されてしまいます。

まぁちゃんと動くからいいんですが。。

IPフィルタ

今回一番手間取ったのは、このフィルタの設定でした。

ネットワークBからのアクセスをインターネットだけにかつping,dns,http,httpsだけに制限するための設定をフィルタを使って行います。

RTXでは各インターフェイス(LAN1,LAN2,LAN3)毎にin,out方向にフィルタを定義できるようです。

インターフェイスに設定できるので、今回の例の場合、LAN1,LAN3のどちらに設定すればいいのかという問題がでてきます。

今回は、内側からの通信を規制したいわけなので、内側になるインターフェイス、つまりLAN1に設定したほうがよいようです。

逆に通常のブロードバンドルーター的な使い方をして、LAN1が内側、LAN2がインターネット側という構成であれば、LAN2のインターフェイスに設定すればよいでしょう。

さて、どのインターフェイスに設定するか決まれば、次のはどの方向に設定するかですが、この in,outにハマりました。以下のような意味になるようです。

in:LAN側からインターフェイスに入ってくる通信

out:インターフェイスからLAN側に出ていく通信

RTXには、フィルタの種類として静的フィルタと動的フィルタがあります。

静的フィルタは文字通りどの方向のどの通信を許可/拒否するかを設定します。

動的フィルタですが、クライアントからサーバへの要求パケットを検出した時点で、その通信で使われるパケットを通すための双方向フィルタが自動的に生成されます。

つまり、RTXの動的フィルタは、戻りパケットの通過を許す手間を省くためのものみたいなかんじですね。(静的フィルタだと行き返り定義しないといけないけど、動的フィルタは行きだけ定義するだけで、返りを自動的に定義してくれるということ。また、通信時以外はポートがクローズされていることになる)

そして、動的フィルタは基本的に通信を許可するときに使用します。

しかし、最初のパケットは静的フィルタが優先されるため、静的フィルタで行きが定義されてないと、動的フィルタが評価されないっぽいです。

このあたりは、ヤマハ:ファイアウォール機能に詳しく書いています。

引用すると、"動的なフィルタは、静的なフィルタよりも優先して動作します。すなわち、 特定のコネクションに対応するドアが開いた後は、 そのコネクションを静的なフィルタで制御することはできません。逆にいえば、 コネクションの最初のパケットだけは、静的なフィルタで制御できます。 詳細は、2.3.3.の絵を参照してください。...繰り返しになりますが、トリガーのコネクションの最初のパケットは、 静的フィルタで通す必要があります。"と書いてます。

最初動的フィルタだけ設定して、この記述を見逃してたのでハマってしまいました。

さて、具体的なフィルタの書き方は以下のようになります。

ip filter 任意のフィルタ番号 pass(許可)/reject(拒否) 送信元IP 送信先IP プロトコル 送信元ポート 送信先ポート

======静的フィルタの設定=======

↓全アクセスを許可する設定

ip filter 1000 pass * * * * *

DNSの問合せは通す設定

ip filter 1001 pass * 192.168.0.11-192.168.0.12 tcp,udp * domain

↓HTTPを通す設定

ip filter 1002 pass * * tcp * www

Pingを通す設定

ip filter 1003 pass * * icmp

ip filter 1004 pass * 192.168.0.1 icmp

HTTPS通す設定

ip filter 1010 pass * * tcp * https

DHCPでクライアントからDHCPサーバ(今回はRTX)を通す設定

ip filter 1011 pass * * udp 68 67

DHCPDHCPサーバ(今回はRTX)からクライアントを通す設定

ip filter 1012 pass * * udp 67 68

ローカルアドレスへのアクセスを拒否する設定

ip filter 5000 reject * 192.168.0.0-192.168.254.254 * * *

↓全アクセスを拒否する設定

ip filter 10000 reject * * * * *

======動的フィルタの設定=======

DNS許可

ip filter dynamic 100 * * domain

↓HTTP許可

ip filter dynamic 101 * * www

↓ICMP許可

ip filter dynamic 103 * * filter 1003

HTTPS許可

ip filter dynamic 106 * * filter 1010

=====フィルタの適用========

ip lan1 secure filter in 1001 1004 5000 1003 1002 1011 10000 dynamic 100 101 103 106

ip lan1 secure filter out 1012 10000

ip インターフェイス secure filter in/out で適用するフィルタ番号を列挙します。

この時の、左から順に適用されて行くようです。(つまり左側が優先度高い)

上記のin側の例だと、最初にDNSの通信かどうか判断し、次に、ルータへのICMPか判断し、ローカルアドレスへのアクセスかどうか、という順番で評価していきます。(基本的に、外側への全通信を拒否するポリシーの上で、許可するポリシーを設定するような仕様にしています)

静的フィルタの条件に合致すれば、次は、動的フィルタの条件に合致するか判断し、合致すれば自動的に双方向のフィルタが作られ、以降のパケットは動的フィルタが使われます。

動的フィルタの確認は以下コマンドでできます。

how ip connection

LAN1[in]

ID FILTER T APPS P INITIATOR D RESPONDER S

519 101 www T 192.168.0.10:4220 > 74.125.235.81:80

521 101 www T 192.168.0.10:4222 > 173.194.38.127:80

522 101 www T 192.168.0.10:4224 > 74.125.235.81:80

524 101 www T 192.168.0.10:4226 > 173.194.38.69:80

フィルタ解除は以下のようにできます。

no ip lan1 secure filter in

no ip lan1 secure filter out

動的フィルタが上手くいかないなら、静的フィルタで設定するというスタンスがいいと思います。

Linuxiptablesとはまた違った感覚のフィルタ設定でした。

ただルータなのでiptables程は細かいフィルタはできないようです。

RTXの設定は、とにかくヤマハのドキュメントを読みこなすことが必要だと感じました。

追記:

上記の設定例はhttp,https,dhcp,icmpを通す設定でしたが、これにメールの通信も許可したいとの依頼がありました。

ということで、以下のフィルタを追加しました。

======静的フィルタの設定=======

↓smpt,smtp(サブミッション),smtps,imap,imaps,pop3,pop3sの通信を許可する

ip filter 1013 pass * * tcp * smtp,587,imap2,pop3,995,993,465

======動的フィルタの設定=======

↓smpt,smtp(サブミッション),smtps,imap,imaps,pop3,pop3sの通信を許可する

ip filter dynamic 107 * * filter 1013

=====フィルタの適用========

ip lan1 secure filter in 1001 1004 5000 1003 1002 1013 1011 10000 dynamic 100 101 103 106 107

参考:

YAMHAルーターのDHCPサーバー機能と動的フィルタ

RTXシリーズの設定メモ

YAMAHA RTシリーズのIPパケット・フィルタ

ヤマハルータの基本的なフィルタ設定

イーサアクセスVPNルーターRTX1500~開発コンセプト~

YAMAHA RTX1100に関するメモ

Yamaha:NATディスクリプタ機能 概要

Yamaha:静的NATや静的IPマスカレードなどを用いたサービス/サーバ公開方法 かなり参考になりました。

Yamaha:11.静的NATや静的IPマスカレードなどを用いたサービス/サーバ公開方法

Yamaha:ネットワークごと一括設定(静的NAT) 静的NATの設定例です。

Yamaha:NATディスクリプタの間違え易い設定例 LAN間の静的NATを1組試しましょ。

RTシリーズの設定事例集