
Ubuntu日本語フォーラム

ログインしていません。
お世話になっております。Ubuntuを使い始めて1年以上たちますが、Ubuntuに限らずやや一般的な質問といいますか…ちょっと概念的な質問をさせてください。
いろいろ設定をしていて気がついたのですが、現在僕の環境ではインターネット側から引いてきてた光回線からルーター1つ、そこからサーバーA(Apacheとvsftpd)とサーバーB(postfixとbind)とクライアントとしてのPCがMacとWindows、合計4台のPCがつながっている状態です。わりと簡単なネットワークなのでこれまであまり深く突っ込んでネットワークのことについて勉強してこなかったのですが、サーバーとネットワークの関係上ポートというのがありますが、例えば(僕のネットワーク環境の例でいうと)サーバーAとサーバーB両方にメールの送信サーバーを設定して双方のポート25を開けた場合にルーターのアドレス変換(NAT?)でのポートも25を開けた場合など、どちらのメールサーバーに情報が行き渡るのでしょうか?固定IPアドレスは1つしか使っていないので、インターネット側の入り口は1つしかないので当然ポートも一つしか開いていないということですよね?
というのは、今現在、メールサーバーをBからAに移動しようと思っているのですが(実際にやってみて、何度か失敗しております…(泣))その場合、サーバーを止めないようにと思って設定しているのですが、どうも概念的に腑に落ちない部分がありました。
まず、PHPやbash、perlなどからメールを送信するスクリプトを使った場合にはAとBのどちらのメールサーバーが使われるのでしょうか?SMTPにBの方のメールサーバーを明示的に指定した場合は、それらが使われているのがわかるのですが、現在AのサーバーではPHPやPerl、bashでは特に何も設定していません。Apacheの特性としてwww-dataというユーザー権限でいろいろなことができるのですが、その中でもメールの送信のシステムがどのように振り分けられているのかちょっとわからなくなってきました。ポート25は双方のサーバーで開けてみても特に不都合はない感じがするのですが…。
きちんと理解していないだけに自分で説明していてもまどろっこしいものになってしまいましたが、サーバーとネットワークの関係でいくらか基礎的な知識というか…そこら辺りでお話していただけると幸いです。
また、僕自身ネットワークに関してきちんと本を読んだりしたことがないので初心者にもわかるような参考になるWebや書籍など紹介していただけるとうれしいです。また皆様が初級者時代にお世話になった本などを紹介してもらえるとさらに幸いです。
よろしくお願いします。
オフライン
#0の oosamuuyさん による投稿:
サーバーAとサーバーB両方にメールの送信サーバーを設定して双方のポート25を開けた場合にルーターのアドレス変換(NAT?)でのポートも25を開けた場合など、どちらのメールサーバーに情報が行き渡るのでしょうか?
oosamuuyさんの構成では、インターネットから送られてくるメールは、oosamuuyさんに割り当てられているグローバル IP の TCP 25 番ポートに届きます
グローバル IP が割り当てられている機器はルーターなので、ルータ自身の特定ポート宛てに届いた IP パケットを、別のコンピューターに転送することが可能です
つまり、ルーターに複数のコンピューターに転送する機能が実装されていれば、希望の動作が可能だということです
しかし現実にはそのような機能が実装されているルーターは存在しません
転送先に指定できるのはどんなに頑張ってもひとつのコンピューターだけです
また、転送先のコンピューターを自動的に探すことはないので、自分でルーターに設定しなくてはいけません
#0の oosamuuyさん による投稿:
まず、PHPやbash、perlなどからメールを送信するスクリプトを使った場合にはAとBのどちらのメールサーバーが使われるのでしょうか?SMTPにBの方のメールサーバーを明示的に指定した場合は、それらが使われているのがわかるのですが、現在AのサーバーではPHPやPerl、bashでは特に何も設定していません。
自分で設定していなくても、どこかに設定されているはずです (または無指定なら localhost 決め打ちになっているものもある)
オフライン
ryさんいつもお世話になっております。
僕自身もいろいろわからないことがある場合は自分で実験してみるのですが、現在ルーターのインターネット側のTCP/25を開けてみて、そのTCP/25から2つのサーバー(AとB)の25に割り振ってみました。僕の記憶では二つのポートを同時に指定したらエラーが出るような思い出があったような…。ryさんご指摘の通りそういうルーターはないということですし、僕の直感からいってもなんかおかしい…。しかし大丈夫でした。それらのポート25をそのままAとBの(同様に)ポート25に向けてやるとエラーなく設定できるわけなんですけど、今nmapをかけてポートスキャンしてみるとTCP/25でsmtpとしてきちんと一つの穴が開いている。しかしルーター内では半ば強引に同じポートから二つのサーバーに同じポートに引き込んでしまっているんですが、このような場合は、どんな流れになっているんでしょうか?先日もApacheのTCP/80でやってみましたが、Apacheの場合は不通になってしまいました。サーバーAをTCP/8080にサーバーBをTCP/80にするときちんとつながりました。メールサーバーでこのようなネットワーク設定にすると、何だかちょっと自分の直感にそぐわないというかダメな設定のような気がするのですが、サーバー自体は動いているは動いているようです。
ry による投稿:
自分で設定していなくても、どこかに設定されているはずです (または無指定なら localhost 決め打ちになっているものもある
Ubuntuのいいところはたいていの設定を自動的に行ってくれるところなのですが、PerlやPHPのメール送信の関係で特に今まで設定したことはないですが、それぞれの設定で送信メールサーバーを指定できるということでしょうか?gmailなんかではsmtpサーバーを無料で使える…なんていうすばらしい機能があるのですが、後々は自分のサーバーでメールサーバーを動かしたいと思っているのですが、gmailのsmtpサーバーに一度引越しして、自分のところの設定が終わったら、戻す…というようなことも考えていますが、それぞれのperlやPHPなどで使用するMTAを指定できるのでしたらそういうこともできるということなんですよね?逆にいうと(たいていの場合は)PerlだとかPHPだとかはMTAとしてsendmailとかpostfixのlocalhostを指定している…というような理解の仕方でいいでしょうか?
今現在、Apacheがある方のサーバーAからメールを送信する場合、あるスクリプトでは送信が可能で、また違うスクリプトからは送信ができないということになっていたりするのですが、これはサーバーAでもって送信サーバーを明示的に指定していないことが原因なんでしょうか?というのは、上記の通り、サーバーAの方のMTAの設定はまだ不完全で僕自身も混乱中なのですが、サーバーBのメールサーバーは健康に動いております。しかし非常に古いメールサーバー(OSがFC5です。)なので新しいものにしてサーバーAに引越ししたいと思っています。
あ、すみません。これを書きながらいろいろ見てみると、php.iniの中に
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
という項目を発見しました。localhostになっていました!ryさんありがとうございます。いろいろわかってきました。たぶん、perlにもbashにもrubyにも似たような設定項目があるのですね。
非常に曖昧なトピックで申し訳ありませんが、非常に勉強になります。
オフライン
#3の oosamuuyさん による投稿:
それらのポート25をそのままAとBの(同様に)ポート25に向けてやるとエラーなく設定できるわけなんですけど、今nmapをかけてポートスキャンしてみるとTCP/25でsmtpとしてきちんと一つの穴が開いている。しかしルーター内では半ば強引に同じポートから二つのサーバーに同じポートに引き込んでしまっているんですが、このような場合は、どんな流れになっているんでしょうか?
たぶん気のせい
ルーターで設定しているときに、ふたつめのサーバーを指定した時点で最初のサーバーの情報を上書きしているだけだと思います (エラーを出すことなく)
#3の oosamuuyさん による投稿:
先日もApacheのTCP/80でやってみましたが、Apacheの場合は不通になってしまいました。サーバーAをTCP/8080にサーバーBをTCP/80にするときちんとつながりました。
これが正常な動作です
#3の oosamuuyさん による投稿:
メールサーバーでこのようなネットワーク設定にすると、何だかちょっと自分の直感にそぐわないというかダメな設定のような気がするのですが、サーバー自体は動いているは動いているようです。
apach と同様に原理的には何の問題もなく動作します
しかし Web の場合は URL を人間が入力するのでその中でポート番号を指定することが可能ですが、メールの場合は不特定のメールサーバーが TCP 25番ポートを前提に送りつけてくるので、別のポート番号を使って動かすのは適切とはいえません
なお、自分が作ったプルグラムだけで使うことが明らかな場合など、わざと TCP 25 番以外のポート番号で動かすこともあります
オフライン
やっぱり気のせいですか…(汗)。そうですよね。なんかちょっとおかしいです。
例えばですけど、そのTCP/25というポートでいうと、
1. 外側(つまりWAN側)から25で入ろうとして、
2. ルーターのWAN側のTCP/25で受け取り、
3. 何らかのアドレス変換なりIPテーブルなり…でLAN内のPCにTCP/25で出し、
4. PCがTCP/25で受けとって、
5. (先のお話のように)なんらかのプログラムがそれを処理する。
という流れですが、僕のネットワークだとこれで十分なのですが、大規模なネットワークの場合はやはりドメインなりホスト名などでそのパケットの流れ(というか行き先)を指定することになるんですよね?というのも僕自身一つ二つのサーバーですが、そんな風にしていますので同じことですよね?
ry による投稿:
なお、自分が作ったプルグラムだけで使うことが明らかな場合など、わざと TCP 25 番以外のポート番号で動かすこともあります
なるほど、いろいろヒントをありがとうございます。これだと送信だけのメールサーバーだとテスト環境でもいいし、僕の現在のネットワーク環境だと設定しやすいかもしれません。先日ここら辺りでかなり強引に25番ポートを二つ開けて(これまでのお話のように)大失敗していた模様です。おまけにSendmailとPostfixでもかなり思考回路が混乱してしまいました。細かい設定は自分で調べるとしても、なかなか大まかなネットワークの規則といいますか原則というものを結構すっ飛ばして現在に至ってしまっているのでいろいろ勉強しなおさないとダメかな…という風に思っています。
なんか概ねネットワークが透明になってきましたありがとうございます。
オフライン