natの用途

すごく基本的なことかもしれないが、
よく悩むしたぶん理解できてないので、整理のために書く。

私はnatが嫌いだ。できることならnatなどしたくない。あんなものはしないに越したことはない。

natというのは、IPアドレスを変換することである。

ユニーク(唯一で重複がないという意味)なIPアドレス同士の通信なのに、途中で送信元あるいはあて先が変更されてしまうと、誰が誰と通信しているのかわからなくなってしまう。送信者も受信者も中継者も混乱する。


ではなぜnatなどということをするのか。

一番多い目的は、privateアドレスをグローバルアドレスに変換することだろう。

家庭でインターネットを利用するような場合だ。

つまり、ルータがあって、内側(LAN側)では192.168.1.0/24などのプライベートアドレスを使用し、
外側(WAN側)には200.xxx.xxx.xxx などのグローバルアドレスが割り当てられているケース。

家にあるパソコンのIPアドレスは 192.168.1.1/24 とかになっている。

ブラウザで http://www.yahoo.co.jp/ とアドレスを指定して(わざわざURLを全部書くことはまずないだろうが)、目的のサーバ(サイト)にアクセスする。

このとき、www.yahoo.co.jp というホスト名(fqdn)はIPアドレスに変換される。
これをおこなうのがDNSサーバである。

たとえば、今 ping www.yahoo.co.jp をやってみると、

183.79.11.230 宛に通信しているのがわかる。

ちなみに私のパソコンのIPアドレスは 192.168.0.16 である。

192.168.0.16 → 183.79.11.230

という通信である。

「プライベートアドレスとグローバルアドレスは直接通信できない」
ということを聞いたことがないだろうか?

それは、事実上は正しいといえなくもないが、TCP/IPの仕組みとしては可能である。

プライベートアドレスもグローバルアドレスも関係ない。

実際に、インターネットにプライベートアドレスを送信元としたパケットを送出することはできる。

宛先にしても。

でも、そのパケットはすぐに破棄されるだろう。



「プライベートアドレスはインターネットに流してはいけない」
というのもよく聞くセリフで、これはその通りなのだが、

経緯としては、グローバルアドレスは重複しないように管理しようと決めて、
例外としてプライベートアドレスというものを作ったのである。


プライベートアドレスの範囲は決まっていて、
192.168.0.0/16
10.0.0.0/8
172.16.0.0/12

である。

さっき、yahooにpingしたときのアドレス 183.79.11.230はグローバルアドレスである。

でも、このIPアドレスをパソコンに設定しようと思えばすることはできる。


インターネットに接続しなければ、どんなIPアドレスを使用することもできる。

通信もできるかもしれない。

でも、インターネットというのはどこに誰がいるのかわからなくても通信できる仕組みで、

そのネットワークに同じIPアドレスが複数存在するとその仕組みは成立しなくなる。



話が長くなってめんどくさくなってきたのでそろそろ終わりにしよう。



natの第一の用途は、このprivate/global変換である。

これがほとんどである。


しかし、もう一つ用途がある。
私も最近ようやくわかった。


これが本題である。プライベートアドレスのことなどどうでもよかったのだ。実は。



(Network A) --- Router1 --- (Network B) --- Router2 --- (Network C)


Network Aから Network B, Network Cのいずれにもアクセスしたいとする。

すごく単純な構成だが、この要件を満たすには「ルーティング」が必要である。


Router1はNetwork A, Bと接続しているがCには接続していないので、
Cに到達するためのnext hopを設定しなければならない。

それは、Router2である。


そして、Router2にとってはAが未知のネットワークで、そこへ到達するためのnext hopは
Router1である。



では上記のような構成ではどうか。

host1はhost2へアクセスしたい。

host2はhost3へアクセスしたい。


ただし、host2のデフォルトゲートウェイはRouterA、
host3のデフォルトゲートウェイはRouterCで、変更できず、
host3にstatic routeを追加することもできない。


このときhost2に、192.168.2.0/24 → RouterB という経路を追加しても、

host3が192.168.1.0/24の経路を知らないため通信が成立しない。

host3にstatic routeを書けばいいのだが事情があって書けない。


というようなときに、natを使う。

RouterBで、192.168.1.0/24のソースアドレスを、192.168.2.0/24に接続しているI/FのIPアドレスにNATするのである。



もっと、一般化して説明したかったのだが・・・

またの機会に。


centos7@さくらのクラウド

apacheをインストール、
vsftpdをインストール。

netstatもない。ssというコマンドを使う。

iptablesはあるが、firewalldというのを使うようになった。

vsftpdはやったことがあるがちょっとはまる。
user_listとかchroot_listとかselinuxとか。

selinuxはpermissiveにする。


さくらのクラウド

申し込んだ。

このブログを独自ドメインで使いたいので、ドメイン名を取った。

使っているVPSでマルチドメインにすればいいのだが、めんどくさいのと、
クラウドに興味があったので、クラウドを申し込んでみた。

VPSと違って、ディスクやNICをマニュアルで割り当てる必要がある。

OSはCentOS7にしたのだが、ifconfigがない。

調べると、7では ip addr show とかでアドレスを表示するそうだ。

ip address は nmtui というコマンドを打つと設定できる。


さらに、ネットワーク設定は有効化(activate)しないと使えない。

ホスト名を設定し、DNSゾーンを編集する。

やっと、pingが通った。

Panasonic CF-N9

パソコンを買った。

秋葉原に売っていた中古のPanasonicのノートPCだ。

CF-N9LWCKDS

OSはWindows7 Professional 64bit

CPU: Corei5 M560@2.67GHz
メモリ: 2GB
HDD: 220GB

2万3000円ほど。

メモリは近くの店で4GBのを3000円ほどで買った。

よく使うソフト、秀丸とかteratermとかをインストールし、
windows updateを実施し、
バッテリの残量表示調整なんとかというのをやって、
最近かったOfficeをインストールした。

64bit、メモリ6GB、快適である。

何がいいって、とにかく軽い。

前からPanasonicのが欲しかったのだが、ついに入手した。

さくらのVPS メール dovecot postfix iptables 外部からのメールを受信できない 25 587 サブミッションポート

つまり、たとえば、自分のgmailのアカウントから、自分のドメインのアカウント宛のメールを送ると、受信できない。

どうなるかというと、送信してもエラーにもなんにもならないが、メールが届かない。

しばらくすると、(数時間?)送信したアカウント宛にメールが送信できなかったというメールが帰ってくる。

 Delivery to the following recipient failed permanently:

     hoge@example.com

Technical details of permanent failure:
The recipient server did not accept our requests to connect. Learn more at https://support.google.com/mail/answer/7720
[(10) example.com. [xx.xx.xx.xx]:25: socket error]
[(10) mail.example.com. [xx.xx.xx.xx]:25: socket error]


これを見れば、「25番が開いてないんじゃん」と思うだろう。

でも、話はそう単純じゃない。

サブミッションポートとかいう設定にしているからだ。587番を使っているのだ。

サブミッションポートというのは、一応設定はして動いてはいるが、実はよくわからない。

単純にSMTPで使用するポートを25から587に変えているのではないようだ。

いろいろ調べたがビンゴな情報はなく、
結局iptablesで25番を開けることで解決した。

「25番は使わないようにしたのに開いてる」と思って、コメントアウトしたような記憶がある。

それを戻して、iptablesをリスタート。