トップページnetwork
16コメント14KB

NAT素朴な疑問

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさんNGNG
ダイアルアップルーターとかでNAT使うとローカルからグローバルに渡すときソースアドレス書きかえるらしいけど
どうやってローカルからかグローバルからのパケットか認識してるかよくわかんね。
やっぱソースアドレスで認識してんのか?
それともパケットが入ってきたインターフェイスで認識してんのか?
わかんね。教えてくださいな。
00021NGNG
なんか文章的に変だからつけたし。
もしNAT環境でローカルと違うソースアドレスしたグローバル向けのパケットをルーターに投げると
やっぱソースアドレス書きかえられてグローバルに流されちゃうのか
そのまんま流すのか知りたい。教えてけろ
0003FiveNGNG
> どうやってローカルからかグローバルからのパケットか認識

YAMAHA だと、
・設定によって認識(nat descriptor address inner ...)
・自動認識(LAN 側 I/F から入ってくるものを全てローカルと認識)
という感じです。通常は設定によるでしょう。

> ローカルと違うソースアドレスしたグローバル向けのパケット

例えば、ルータの LAN 側アドレスが 192.168.0.1/24 であり、
そこに 172.16.0.1/24 なマシンがパケットを投げたらどうなるか、
ということでしょうか。
これってそもそもルータにパケットが届かないと思います。
00041NGNG
>例えば、ルータの LAN 側アドレスが 192.168.0.1/24 であり、
>そこに 172.16.0.1/24 なマシンがパケットを投げたらどうなるか、
>ということでしょうか。
本来192.168.0.2/24なマシンが172.16.0.1/24なマシンとしてグローバルのマシン(210.45.21.4)
に向けてパケットを投げると途中にあるダイアルアップルーター(192.168.0.1)がどう反応するのかってことです。
普通ならローカルのソースアドレスはグローバルにルーティングされるとき書き換えられちゃうところがどうなるのか?
やっぱLAN側のパケットを全部ローカルってことになる設定なら破棄or書き換えなっちゃいますかね?

>これってそもそもルータにパケットが届かないと思います。
届かないとは?
ルーターで破棄されるっちゅーことっすか?
0005FiveNGNG
> 本来192.168.0.2/24なマシンが172.16.0.1/24なマシンとして

これの意味がよく分かりません。
・192.168.0.2 というアドレスと 172.16.0.1 というアドレスの両方を持つ
 マシンである。
・本来 192.168.0.2 というアドレスを持つマシンのアドレスを 172.16.0.1 に
 つけかえている。
どちらの状況でしょうか。いずれにせよ、デフォルトゲートウェイとなっている
マシンのアドレスに向けてパケットが投げられます。

IP の場合、「A: 最終的な通信相手」と「B: A に送るにあたり、直接の通信を
する相手」は区別されます。例えば、x から z というマシンにパケットを
送るにあたり、
x <---&gt; y <---&gt; w <---&gt; z
という風につながっている場合には、x から見て、上記 A は z であり、
B は y になります。即ち、x は z に送るためにまず y に送り、y は z に
送るために w に送り、w は z に送るために z に送る、という手順になります。

ここで注意すべき点は、各マシンで A は何か・B は何かを判断することです。
あるマシンが B が z だと思ったとしても、別のマシンで B が z とされるとは
限らない、ということです。抽象的で分かりにくいかもしれませんが、
コネクションレス通信についてお調べになられれば分かると思います。
0006FiveNGNG
> ルーターで破棄される

すみません、間違いです。そもそもパケットが送信されない可能性があります。

IP では、まず上記 A に送るために経由すべき B が何かが非常に重要に
なります。1 さんの例では A = 210.45.21.4 であり、B = 192.168.0.1 と
なります。

ここで、192.168.0.2 のマシン (X としましょう) が A にパケットを送ると
しましょう。X はまず、経路制御表を参照して、A への経路が存在しないかを
チェックします。このときに、以下のアルゴリズムで次に取るべき行動が決まります。
・(1) A が同じネットワーク上にあれば、直接送信する。
・(2) A への直接の経路(ホスト経路)が存在すれば、その経路で次ホップとして
 指定されているルータ (Y) へパケットを送ろうとする。このときに、A = Y として
 このアルゴリズムをやり直す(重要!)。
・(3) A の属するネットワークへの経路が存在したら、その経路で次ホップとして
 指定されたルータ (Y) へパケットを送信しようとする。このときに A = Y として
 次に取るべきアクションが決まる(重要!)。複数の経路がある場合には、以下の
 基準でどの経路を選択するかが決まる。
  ・(3-1) 経路がより特定されている(192.168.0.0/16 より 192.168.0.0/24 の方が
   特定されている)
  ・(3-2) 同じ特定度の経路が複数ある場合には、コストが最も少ないものが選択される。
  ・(3-3) コストが同じものがある場合には、ランダムに選択されるか、両方の経路を
   使おうとする(設定や実装によって異なる)。
・(4) A に属するネットワークへの経路が存在しない場合には、デフォルト経路と呼ばれる
 特殊な経路が選択される。このときに、この経路で次ホップとして選択される
 ルータのことをデフォルトゲートウェイ (Y) という。A = Y としてこの
 アルゴリズムをやり直すのは前述と同様。
0007FiveNGNG
さて、X のマシンでは 192.168.0.2@` 172.16.0.1 の両方のアドレスがついていると
しましょう。
そして X のマシンの経路制御表が以下のようになっているとしましょう。何も
設定しないと以下のようになります。デフォルトゲートウェイは 192.168.0.1 と
なっています。

Route -> Gateway
---------- ---------
0.0.0.0/0 -> 192.168.0.1
172.16.0.0/24 -> 172.16.0.1
172.16.0.1/32 -> 127.0.0.1
192.168.0.0/24 -> 192.168.0.2
192.168.0.2/32 -> 127.0.0.1

ここで A 宛てのパケットを送ろうとしたときに、以下のように判断されます。
・(1) 210.45.21.4 は同じネットワーク上に無い。
・(2) 210.45.21.4 宛てのホスト経路はない。
・(3) 210.45.21.4 宛ての経路で既知のものはない。
・(4) に従って、このパケットは 192.168.0.1 に送られる。
・(1) 192.168.0.1 は同じネットワーク上にある。ゆえに直接送信される。
・終了
このように、デフォルトゲートウェイとして指定されたルータに対して、そのルータと
同じネットワークアドレスを持つインターフェースから送信されて終わりです。
そしてルータ上でソースアドレスが変換されてインターネットへ送出されます。
0008FiveNGNG
これに対して、X は 172.16.0.1 のアドレスを持ち、デフォルトゲートウェイとして
192.168.0.1 が指定されているとします(意外にあるんです、こんな設定がされた
マシン)。そして X のマシンの経路制御表が以下のようになっているとしましょう。
何も設定しないと以下のようになります。

Route -> Gateway
---------- ---------
0.0.0.0/0 -> 192.168.0.1
172.16.0.0/24 -> 172.16.0.1
172.16.0.1/32 -> 127.0.0.1

上記アルゴリズムに従ってどうなるか見ましょう。
・(1) 210.45.21.4 は同じネットワーク上に無い。
・(2) 210.45.21.4 宛てのホスト経路はない。
・(3) 210.45.21.4 宛ての経路で既知のものはない。
・(4) に従って、このパケットは 192.168.0.1 に送られる。
・(1) 192.168.0.1 は同じネットワーク上に無い。
・(2) 192.168.0.1 宛てのホスト経路も無い。
・(3) 192.168.0.1 宛ての経路で既知のものはない。
・このパケットは送信不能として破棄。no route to host が表示される。

従って、このパケットはルータに届きません。
従って、ルータが何か反応するということもありません。

以上の説明でよろしいでしょうか?
# 1 さんはもう少し経路とは何か、経路の選択基準は何かについて勉強された方が
 よいかと思います。
0009FiveNGNG
本当にごめんなさい。
分かりやすくするつもりで、間違ったことを書いてしまいました。
8 ですが、
>・(2) 192.168.0.1 宛てのホスト経路も無い。
>・(3) 192.168.0.1 宛ての経路で既知のものはない。
この判定はしません。最初の判定ではねられた時点で終わりです。

すなわち、next hop が決まったら、その経路への再評価はしません。
例えば、192.168.0.1 に送るときに、
192.168.0.0/24 -> 172.16.0.1
172.16.0.0/16 -> 10.0.0.1
10.0.0.0/8 -> local
とあったとしても、192.168.0.1 へ送る手段はありません。
上記で A = Y として、としたのは (1) の基準を再度書くのが面倒だった
からですが、8 で自分がミスっていては仕方がないですね。ごめんなさい。
# やはり未熟者です。勉強しろ > 自分
0010名無しさんNGNG
ネット使って勉強してるやつは
ほんと知識が中途半端だよなあ。
本買って読みなさいって。
00111NGNG
>Five
>さて、X のマシンでは 192.168.0.2@` 172.16.0.1 の両方のアドレスがついているとしましょう。
説明がたりなかったですね。すんません。アドレスがついてるってわけじゃなくて
RAWソケットでIPヘッダ書き換えて本来192.168.0.2なマシンが172.16.0.1なソースアドレスのパケット
を送ったらどうなるか?ってことっす。
つまりマシンの設定自体は192.168.0.2の場合のデフォまんまで別途プログラムからパケットのIPヘッダを書き換えて
投げたらどうなるかって質問でした。
たぶん結果は7のとこに書いてあるのと同じになっちゃいますね。
ご丁寧に説明ありがとうございました。
もうちょっとルーティング関連勉強してみます。
0012FiveNGNG
RAW ソケットで直に違う IP のパケットを送る場合、
ARP で失敗するような気がしますが、どうなんでしょうねえ。
RAW socket には詳しくないのでアレですが、ルータの MAC アドレスを
直接指定して送信できるなら、ルータまでは到達できますね。その後は、
設定で 192.168.0.0/24 を inner としているなら破棄されるし、auto に
しているなら変換されて流れていくでしょう。

ただ、戻りのパケットは確実に失われます。確実に ARP 失敗するから。
0013FiveNGNG
あー、また間違えてる。ARP じゃなくて経路選択の時点で失敗です。
0014名無しさんNGNG
NATって、いわばトランスポート層まで監視したFireWallですよね?
0015FiveNGNG
NAT と Firewall は目的・手段・場所が異なるので、両者を比較するのは
難しいと思います。両方組み合わせて使うことが多いのですが。

NAT の目的: 希少なアドレス空間の効率的利用
NAT の手段: IP Address の付け替え(IPAddress と IPAddress/Port の
       1対1写像の管理)
NAT の置き場所: 異なるアドレス空間の中間点

Firewall の目的: セキュリティポリシーの適用
Firewall の手段: 通過すべきトラフィックと捨てるべきトラフィックの選別
          必要に応じて内容の変換
Firewall の置き場所: 異なるセキュリティポリシーを持つ組織の中間点
            (従って同一組織でも異なるセキュリティポリシーを持つ
             内部組織がある場合には Firewall を置く)
0016FiveNGNG
あ、NAT の目的はこれに限定されませんね。アドレスのつけかえ(リナンバリング
という)をしたときに、事情があってアドレスの付け替えが不可能な
マシンのために NAT を立てるケースもありますから。

NAT の目的: あるアドレスを持つネットワークを、透過的に(= どのマシンからも
        異なるネットワークアドレス上にあることを意識させずに)
        別のアドレスを持つホストないしネットワークとして
        認識させるようにする。
という感じでまとめればいいのかな。
# もっと厳密な定義がほしい人は RFC2663 を見てね。
■ このスレッドは過去ログ倉庫に格納されています