STPのBPDUのブリッジプライオリティのフィールドは4ビットである。つまり十進数で0~15までの16段階しかない。
デフォルトのプライオリティは32768である。BPDUには実際のpriorityを4096で割ったものが記録される。
つまりプライオリティは4096の倍数でしか設定できない。
デフォルトの場合、8になる。
プライオリティは「ブリッジID」の先頭4ビットである。
priority (4)
拡張システムID(vlan id) (12)
mac address (48)
このブログを検索
2012/02/02
STPの種類
初耳
switchport autostate exclude
flex link
Thu Feb 2 10:02:58 2012
STPの種類
PVST(デフォルト)... vlanごとにひとつのSTPインスタンスを持つ。つまり、vlanごとにルートブリッジの選出とポートの役割が決定される。vlanごとにrootブリッジを決め、ブロックされるポートを変えることができる。つまり、負荷分散ができる。
MST ... STPのインスタンスとvlanの対応を任意に設定できる。たとえばvlan 10,20...100と10個のvlanがあったときに、10から50はインスタンス1、60-100はインスタンス2、というように。これにより負荷分散も可能であり、いくつかのインスタンスをまとめることもできる。
2950, IOS 12.1(22)EA13 では、modeは mst, pvst, rapid-pvstのいずれかを設定できる。
cata1(config)#spanning-tree mode ?
mst Multiple spanning tree mode
pvst Per-Vlan spanning tree mode
rapid-pvst Per-Vlan rapid spanning tree mode
MSTにすると、コスト値が変わる。100Mbpsが200000 となる。
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/30 Desg FWD 200000 128.30 P2p
Fa0/47 Desg BKN*200000 128.47 P2p Bound(PVST) *ROOT_Inc
Fa0/48 Desg BKN*200000 128.48 P2p Bound(PVST) *ROOT_Inc
ちなみに上記は、対向装置がpvstの場合である。
Boun というroleは、異なるモードのstpの境界であることを示す。
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Desg BLK 200000 128.1 P2p
Fa0/47 Boun FWD 200000 128.47 P2p Bound(RSTP)
Fa0/48 Desg BLK 200000 128.48 P2p
モードがmstであっても、名前が違うと"Bound"になる。
RSTPとは、pvstのrapid版である。速いpvstである。
どのくらい速いか?
FWD状態のポートをダウンさせると、Roleがaltn, StsがBLKのポートが一瞬でFWDになる。
ダウンしたポートをまたアップさせると、一瞬でステータスが変わる。
なんでデフォルトをrstpにしないんだろうか?
pvst, rstp, mstについては、前回勉強したとき深くやらなかった。
実際に設定して動作を確認することもしなかった。
よく合格したな・・・。
switchport autostate exclude
flex link
Thu Feb 2 10:02:58 2012
STPの種類
PVST(デフォルト)... vlanごとにひとつのSTPインスタンスを持つ。つまり、vlanごとにルートブリッジの選出とポートの役割が決定される。vlanごとにrootブリッジを決め、ブロックされるポートを変えることができる。つまり、負荷分散ができる。
MST ... STPのインスタンスとvlanの対応を任意に設定できる。たとえばvlan 10,20...100と10個のvlanがあったときに、10から50はインスタンス1、60-100はインスタンス2、というように。これにより負荷分散も可能であり、いくつかのインスタンスをまとめることもできる。
2950, IOS 12.1(22)EA13 では、modeは mst, pvst, rapid-pvstのいずれかを設定できる。
cata1(config)#spanning-tree mode ?
mst Multiple spanning tree mode
pvst Per-Vlan spanning tree mode
rapid-pvst Per-Vlan rapid spanning tree mode
MSTにすると、コスト値が変わる。100Mbpsが200000 となる。
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/30 Desg FWD 200000 128.30 P2p
Fa0/47 Desg BKN*200000 128.47 P2p Bound(PVST) *ROOT_Inc
Fa0/48 Desg BKN*200000 128.48 P2p Bound(PVST) *ROOT_Inc
ちなみに上記は、対向装置がpvstの場合である。
Boun というroleは、異なるモードのstpの境界であることを示す。
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Desg BLK 200000 128.1 P2p
Fa0/47 Boun FWD 200000 128.47 P2p Bound(RSTP)
Fa0/48 Desg BLK 200000 128.48 P2p
モードがmstであっても、名前が違うと"Bound"になる。
RSTPとは、pvstのrapid版である。速いpvstである。
どのくらい速いか?
FWD状態のポートをダウンさせると、Roleがaltn, StsがBLKのポートが一瞬でFWDになる。
ダウンしたポートをまたアップさせると、一瞬でステータスが変わる。
なんでデフォルトをrstpにしないんだろうか?
pvst, rstp, mstについては、前回勉強したとき深くやらなかった。
実際に設定して動作を確認することもしなかった。
よく合格したな・・・。
2012/02/01
続続・642-813J SWITCHの準備
catalyst2950とcatalyst3550がある。
3550はL3スイッチなので、vlanにIPアドレスを設定できる。
今、vlan 10に 192.168.10.254/24 というアドレスを振った。
そして、そのvlan 10に所属するポートにcatalyst2950を接続し、catalyst2950に192.168.10.1/24というアドレスを持った装置を接続した。
そして192.168.10.1と192.168.10.254の間で通信をおこなった。
その後、show mac address-table を 3550で実行すると、次のようになる。
All 000b.fdb9.a683 STATIC CPU
All 000b.fdb9.a684 STATIC CPU
All 000b.fdb9.a685 STATIC CPU
All 000b.fdb9.a686 STATIC CPU
All 000b.fdb9.a687 STATIC CPU
All 000b.fdb9.a688 STATIC CPU
All 000b.fdb9.a689 STATIC CPU
All 000b.fdb9.a68a STATIC CPU
All 000b.fdb9.a68b STATIC CPU
All 000b.fdb9.a68c STATIC CPU
All 000b.fdb9.a68d STATIC CPU
All 000b.fdb9.a68e STATIC CPU
All 000b.fdb9.a68f STATIC CPU
All 000b.fdb9.a690 STATIC CPU
All 000b.fdb9.a691 STATIC CPU
All 000b.fdb9.a692 STATIC CPU
All 000b.fdb9.a693 STATIC CPU
All 000b.fdb9.a694 STATIC CPU
All 000b.fdb9.a695 STATIC CPU
All 000b.fdb9.a696 STATIC CPU
All 000b.fdb9.a697 STATIC CPU
All 000b.fdb9.a698 STATIC CPU
All 000b.fdb9.a699 STATIC CPU
All 000b.fdb9.a69a STATIC CPU
All 000b.fdb9.a69b STATIC CPU
All 000b.fdb9.a69c STATIC CPU
All 000b.fdb9.a69d STATIC CPU
All 000b.fdb9.a69e STATIC CPU
All 000b.fdb9.a69f STATIC CPU
All 000b.fdb9.a6a0 STATIC CPU
All 000b.fdb9.a6a1 STATIC CPU
All 000b.fdb9.a6a2 STATIC CPU
All 000b.fdb9.a6a3 STATIC CPU
All 000b.fdb9.a6a4 STATIC CPU
All 000b.fdb9.a6a5 STATIC CPU
All 000b.fdb9.a6a6 STATIC CPU
All 000b.fdb9.a6a7 STATIC CPU
All 000b.fdb9.a6a8 STATIC CPU
All 000b.fdb9.a6a9 STATIC CPU
All 000b.fdb9.a6aa STATIC CPU
All 000b.fdb9.a6ab STATIC CPU
All 000b.fdb9.a6ac STATIC CPU
All 000b.fdb9.a6ad STATIC CPU
All 000b.fdb9.a6ae STATIC CPU
All 000b.fdb9.a6af STATIC CPU
All 000b.fdb9.a6b0 STATIC CPU
All 000b.fdb9.a6b1 STATIC CPU
All 000b.fdb9.a6b2 STATIC CPU
All 0100.0c00.0000 STATIC CPU
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
All 0100.0ccd.cdce STATIC CPU
All 0180.c200.0000 STATIC CPU
All 0180.c200.0001 STATIC CPU
All 0180.c200.0002 STATIC CPU
All 0180.c200.0003 STATIC CPU
All 0180.c200.0004 STATIC CPU
All 0180.c200.0005 STATIC CPU
All 0180.c200.0006 STATIC CPU
All 0180.c200.0007 STATIC CPU
All 0180.c200.0008 STATIC CPU
All 0180.c200.0009 STATIC CPU
All 0180.c200.000a STATIC CPU
All 0180.c200.000b STATIC CPU
All 0180.c200.000c STATIC CPU
All 0180.c200.000d STATIC CPU
All 0180.c200.000e STATIC CPU
All 0180.c200.000f STATIC CPU
All 0180.c200.0010 STATIC CPU
100 0016.9da0.4ec1 DYNAMIC Fa0/1
100 0080.bd08.978b DYNAMIC Fa0/1
300 000d.0234.faa9 DYNAMIC Fa0/33
300 0016.9da0.4ed1 DYNAMIC Fa0/33
Total Mac Addresses for this criterion: 76
3550は48ポートで、1行目から48行目までは各ポートの持っているMACアドレスである。 それ以降のアドレスは何なのか、不明。
そして最後の4行にあるのが、実際に通信した装置のMACアドレスである。
vlanは100,200,300と作ってある。
200のアドレスはエージアウトして消えているので100,300のものが表示されている。
さて、vlan 100について、二つのアドレスが表示されている。 このcatalystが通信した相手は1台だけで、そのmac addressは 0080.bd08.978bである。
では、もうひとつの 0016.9da0.4ec1はどこのmac addressか?
これは、catalyst3550と通信した装置の間にある、catalyst2950のポートのmac addressである。
これは衝撃的な事実である。 L3スイッチとあるデバイスが通信したときに、mac address-tableにその間のL2スイッチのポートのmac addressが記録されているとは!
私の中でL2スイッチの動作概念が覆された。
そもそも、2950の各ポートにmacアドレスがあること自体に驚いた。 管理VLANを設定したときにはL3通信をすることになるからそのときのためかなと思ったのだが、
そうではなくてL2通信しかしていないのにmac address-tableには学習されているのだ。
cdpとstpをとめたがやはり表示されている。
2950に2台のデバイスを接続してその間で通信した場合はデバイスのmac addressのみが表示される。
スイッチ間を接続すると、対向ポートのmacを学習するようだ。
l2,l3によらず。
でも、たとえスイッチ間を接続してその間でフレームを転送する必要があるとしても、 通信に必要なmacアドレスはエンド同士のみのはずだから、
やはりスイッチのポートのaddressを覚えるのはcdpなどのようなスイッチ間の通信のためではないだろうか?
ポートをキャプチャしてみると、cdp, stp, そしてloop というフレームが送信されている。 loopというのは、type 0x9000で、cdpとは違うものである。
この3つを全部とめれば、さっきの対向ポートのmac学習はしなくなった。
ちなみにloopを止めるにはinterfaceで no keepaliveを設定する。
また今更シリーズ。
catalyst2台を、それぞれvlan 10, vlan 20と二つのvlanに区切り、その2台を接続する。
やり方は2つある。
ひとつは、同じvlan同士をケーブルでつなぐ。vlanの数だけケーブルが必要になる。当然、ポートも。
もうひとつは、トランクポートを作って、スイッチ間を1本のケーブルで接続する。
こうすればvlanがいくつになってもケーブルは1本でよい。
これがトランクの使い方であるが、私はいつもvlan間直接接続方式にしていた。
つい最近、職場で3~4台のcatalystをつないだときもそうしていて、ポートが足りないと悩んでいたが、トランク接続すればよかったのだ。
ただし、一本のリンクで複数vlanをまとめるのだから当然帯域はきつくなる。
私の職場も、帯域はけっこうシビアだったのでこれでよかったのかもしれないが、
それをわかってやっていたわけではなかった。
L2スイッチについては、誤解や無知の部分がけっこうある。
STPとかが苦手なのも根本的にL2の通信についての理解不足が原因かもしれない。
3550はL3スイッチなので、vlanにIPアドレスを設定できる。
今、vlan 10に 192.168.10.254/24 というアドレスを振った。
そして、そのvlan 10に所属するポートにcatalyst2950を接続し、catalyst2950に192.168.10.1/24というアドレスを持った装置を接続した。
そして192.168.10.1と192.168.10.254の間で通信をおこなった。
その後、show mac address-table を 3550で実行すると、次のようになる。
All 000b.fdb9.a683 STATIC CPU
All 000b.fdb9.a684 STATIC CPU
All 000b.fdb9.a685 STATIC CPU
All 000b.fdb9.a686 STATIC CPU
All 000b.fdb9.a687 STATIC CPU
All 000b.fdb9.a688 STATIC CPU
All 000b.fdb9.a689 STATIC CPU
All 000b.fdb9.a68a STATIC CPU
All 000b.fdb9.a68b STATIC CPU
All 000b.fdb9.a68c STATIC CPU
All 000b.fdb9.a68d STATIC CPU
All 000b.fdb9.a68e STATIC CPU
All 000b.fdb9.a68f STATIC CPU
All 000b.fdb9.a690 STATIC CPU
All 000b.fdb9.a691 STATIC CPU
All 000b.fdb9.a692 STATIC CPU
All 000b.fdb9.a693 STATIC CPU
All 000b.fdb9.a694 STATIC CPU
All 000b.fdb9.a695 STATIC CPU
All 000b.fdb9.a696 STATIC CPU
All 000b.fdb9.a697 STATIC CPU
All 000b.fdb9.a698 STATIC CPU
All 000b.fdb9.a699 STATIC CPU
All 000b.fdb9.a69a STATIC CPU
All 000b.fdb9.a69b STATIC CPU
All 000b.fdb9.a69c STATIC CPU
All 000b.fdb9.a69d STATIC CPU
All 000b.fdb9.a69e STATIC CPU
All 000b.fdb9.a69f STATIC CPU
All 000b.fdb9.a6a0 STATIC CPU
All 000b.fdb9.a6a1 STATIC CPU
All 000b.fdb9.a6a2 STATIC CPU
All 000b.fdb9.a6a3 STATIC CPU
All 000b.fdb9.a6a4 STATIC CPU
All 000b.fdb9.a6a5 STATIC CPU
All 000b.fdb9.a6a6 STATIC CPU
All 000b.fdb9.a6a7 STATIC CPU
All 000b.fdb9.a6a8 STATIC CPU
All 000b.fdb9.a6a9 STATIC CPU
All 000b.fdb9.a6aa STATIC CPU
All 000b.fdb9.a6ab STATIC CPU
All 000b.fdb9.a6ac STATIC CPU
All 000b.fdb9.a6ad STATIC CPU
All 000b.fdb9.a6ae STATIC CPU
All 000b.fdb9.a6af STATIC CPU
All 000b.fdb9.a6b0 STATIC CPU
All 000b.fdb9.a6b1 STATIC CPU
All 000b.fdb9.a6b2 STATIC CPU
All 0100.0c00.0000 STATIC CPU
All 0100.0ccc.cccc STATIC CPU
All 0100.0ccc.cccd STATIC CPU
All 0100.0ccd.cdce STATIC CPU
All 0180.c200.0000 STATIC CPU
All 0180.c200.0001 STATIC CPU
All 0180.c200.0002 STATIC CPU
All 0180.c200.0003 STATIC CPU
All 0180.c200.0004 STATIC CPU
All 0180.c200.0005 STATIC CPU
All 0180.c200.0006 STATIC CPU
All 0180.c200.0007 STATIC CPU
All 0180.c200.0008 STATIC CPU
All 0180.c200.0009 STATIC CPU
All 0180.c200.000a STATIC CPU
All 0180.c200.000b STATIC CPU
All 0180.c200.000c STATIC CPU
All 0180.c200.000d STATIC CPU
All 0180.c200.000e STATIC CPU
All 0180.c200.000f STATIC CPU
All 0180.c200.0010 STATIC CPU
100 0016.9da0.4ec1 DYNAMIC Fa0/1
100 0080.bd08.978b DYNAMIC Fa0/1
300 000d.0234.faa9 DYNAMIC Fa0/33
300 0016.9da0.4ed1 DYNAMIC Fa0/33
Total Mac Addresses for this criterion: 76
3550は48ポートで、1行目から48行目までは各ポートの持っているMACアドレスである。 それ以降のアドレスは何なのか、不明。
そして最後の4行にあるのが、実際に通信した装置のMACアドレスである。
vlanは100,200,300と作ってある。
200のアドレスはエージアウトして消えているので100,300のものが表示されている。
さて、vlan 100について、二つのアドレスが表示されている。 このcatalystが通信した相手は1台だけで、そのmac addressは 0080.bd08.978bである。
では、もうひとつの 0016.9da0.4ec1はどこのmac addressか?
これは、catalyst3550と通信した装置の間にある、catalyst2950のポートのmac addressである。
これは衝撃的な事実である。 L3スイッチとあるデバイスが通信したときに、mac address-tableにその間のL2スイッチのポートのmac addressが記録されているとは!
私の中でL2スイッチの動作概念が覆された。
そもそも、2950の各ポートにmacアドレスがあること自体に驚いた。 管理VLANを設定したときにはL3通信をすることになるからそのときのためかなと思ったのだが、
そうではなくてL2通信しかしていないのにmac address-tableには学習されているのだ。
cdpとstpをとめたがやはり表示されている。
2950に2台のデバイスを接続してその間で通信した場合はデバイスのmac addressのみが表示される。
スイッチ間を接続すると、対向ポートのmacを学習するようだ。
l2,l3によらず。
でも、たとえスイッチ間を接続してその間でフレームを転送する必要があるとしても、 通信に必要なmacアドレスはエンド同士のみのはずだから、
やはりスイッチのポートのaddressを覚えるのはcdpなどのようなスイッチ間の通信のためではないだろうか?
ポートをキャプチャしてみると、cdp, stp, そしてloop というフレームが送信されている。 loopというのは、type 0x9000で、cdpとは違うものである。
この3つを全部とめれば、さっきの対向ポートのmac学習はしなくなった。
ちなみにloopを止めるにはinterfaceで no keepaliveを設定する。
また今更シリーズ。
catalyst2台を、それぞれvlan 10, vlan 20と二つのvlanに区切り、その2台を接続する。
やり方は2つある。
ひとつは、同じvlan同士をケーブルでつなぐ。vlanの数だけケーブルが必要になる。当然、ポートも。
もうひとつは、トランクポートを作って、スイッチ間を1本のケーブルで接続する。
こうすればvlanがいくつになってもケーブルは1本でよい。
これがトランクの使い方であるが、私はいつもvlan間直接接続方式にしていた。
つい最近、職場で3~4台のcatalystをつないだときもそうしていて、ポートが足りないと悩んでいたが、トランク接続すればよかったのだ。
ただし、一本のリンクで複数vlanをまとめるのだから当然帯域はきつくなる。
私の職場も、帯域はけっこうシビアだったのでこれでよかったのかもしれないが、
それをわかってやっていたわけではなかった。
L2スイッチについては、誤解や無知の部分がけっこうある。
STPとかが苦手なのも根本的にL2の通信についての理解不足が原因かもしれない。
2012/01/29
続・642-813J SWITCHの準備 スイッチの本質
いろいろあって中断していましたが、再開します。
「トポロジベース」というのは、個々のフローに応じて転送を行うのではなく、ネットワークトポロジを格納しておりそれを参照して転送をおこなうもの。そのトポロジとは、つまりルータのルーティングテーブルのようなものであろう。しかし、どうしてルーティングテーブルと呼ばないのか?ルーティングじゃないから、か。では「ルーティング」と「L3転送」の違いは?
これについて納得いく説明はできないし聞いたこともない。
スパニングツリー・・・。
etherchannelの silent modeというのは、前回BCMSNを受験したときにはなかったトピックである。
ブリッジングループの発生メカニズムについては、前回の試験でもよく読んだし、自分でも納得済みのことであるが、大事な原則なので、あらためて確認しておく。
「フレーム」というのは、送信されるデータをLayer2で捉えたときの呼び方である。それはpingのecho requestであるかもしれない。それは普通「パケット」と言う。イーサヘッダが先にあって、その後にIPヘッダがつく。フレームとして考えるとIPヘッダは「フレームのデータの一部」ということになる。
pingしたときにパケットキャプチャすると、イーサヘッダも見える。実際にノードやスイッチが送受信しているものはイーサヘッダまで含んだ「フレーム」である。
イーサネットフレームの最大長は1518オクテット(VLANタグも含めると1522)、
IPパケット(ヘッダ+データ部)の最大長は65536バイトである。
ちょっと話がそれて基本的なことの確認になってしまったが久しぶりなので許して欲しい。
さて、PC1からPC2にフレームが送信される、ということであった。
どのようなフレームであるかはどうでもいいのだが、なるべく具体的なイメージがつかめるように、
pingのecho requestのIPパケット(を含むフレーム)であったとしよう。
pingはサイズ指定できるがそれをせずに64バイトの普通のpingだったとしよう。つまり、フレームも1個であった。
アドレス解決は済んでいたので、arp requestも送信されず、いきなりecho requestが飛んだ。
MACアドレスは PC1が 0001.0001.0001, PC2が0002.0002.0002だったとする。
送信されるフレームヘッダにはSRC:0001.0001.0001, DST:0002.0002.0002 と書かれている。
SwitchBがport2でフレームを受信した瞬間に、宛先へのフラッディングをおこなう。このときはport1,3から送信される。
だがほぼ同時にport3でも同じフレームを受信している。
このときのSwitchの動作はどういう順序でおこなうのか?
port2でのフレーム受信→port1とport3からのフラッディング→port3でのフレーム受信→port2とport1からのフラッディング
だろうか?
あるいはフラッディングの前に後からのフレーム受信処理が割り込むことがあるだろうか?
port2でのフレーム受信→port3でのフレーム受信
→por2とport1からのフラッディング
それは気になるが、いずれにせよ、SwitchBはport2とport1からフラッディングすることになる。
でもそれをしないと接続ポート変更にどうやって対応するのか、ということになる。
たとえば1回受信しただけでは更新しないとか、直後(一定の時間内)なら更新しないとか・・・
フラッディングするフレームには印をつけるとか・・・。
たとえ学習済みのsrc macアドレスのフレームであってもフラッディングされたものであったら更新しない。
いちいちフラッディングされたかを確認しなければならないということを除けばうまくいきそうに思えるが・・・
ごく少数の装置を「つなげる」だけであれば、この3つは区別がつかないだろう。
もっとも、今ではハブやブリッジを入手することは困難である。
(もう製造されていないか?)
ブリッジという装置が登場したときは、2ポートしかなかったそうだ。
各ポートにハブをつないで使っていたのか。
やがて2つじゃ少ないというので、「マルチポートブリッジ」が登場した。
しかしこれはただブリッジをくっつけただけで、動作原理はブリッジとまったく同じだった。
それが「スイッチ(スイッチングハブ)」と呼ばれるようになったのは、どのような革新があったからなのか。
私はまずスイッチからその動作原理を学習し始め、そのときに「アドレス学習は出力ポート選択のため」と認識していたのだが、実はこれは副次的な目的であって、主目的はやはり「不要なフラッディングの抑制」なのだった。
やはり、通信機器というのは、その機能するレイヤーが上位に行くほど、通信が抑制される。
基本は全コピー。なんでもかんでもコピーしてばらまく。そうすればとりあえず届く。
でもそうすると余計な送受信が発生するので、それを減らすような装置が必要となり、スイッチやルータが登場した。
これで整理がついた。
黒本の前にガイドを読んで再整理です。
以前、「ルータとはデバイス同士の接続を切断する装置である」と書いたことがあるが、それはL2スイッチにも言える事である。
L2スイッチは、コリジョンドメインが各ポートごとに存在する。そのポートにデバイスが接続されていれば、そのデバイスはそれぞれ別のコリジョンドメインに所属する。
たとえば10個のポートを持つL2スイッチのすべてのポートに1台ずつPCを接続した場合、コリジョンドメインは10個に分離されることとなる。
そういう意味で「L2スイッチも接続を切断する」と言えるが、その切断のしかたはルータとは異なる。
ルータはブロードキャストドメインを切断するので、適切なルーティングをおこなわないとノード間で通信ができない、という意味での切断である。
L2スイッチの場合は、受信する必要のないフレームを受信しなくてすむ、という消極的な切断である。だから、ハブで接続していたのをスイッチに置き換えたからといって、各ノード間で通信ができなくなることはない。
ハブとL2スイッチの違いを示す具体的な例をあげると、
たとえばオフィスのある島で10人がひとつのハブ(バカハブ)に接続してメールの送受信をしていたとすると、ある人のpopアクセスのやりとりを別の人が自分のPCのNICをキャプチャすることで覗き見ることができる。
実際に私はそのような状況で、他人のパスワードを盗み見たことがある(メールは読んでない)。
ハブをL2スイッチに置き換えることの利点は、主に不要なフラッディングをなくして、ネットワークの利用効率を上げることである。
つまり、「遅くならない」ようにする。ハブのときと比べると「速くなった」と感じるかもしれない。
「L2スイッチの方が高性能だから転送が速い」ということではなく、余計なフレームの送受信が減ったために相対的に速くなったように感じるのみである。
たとえば10個のポートを持つL2スイッチのすべてのポートに1台ずつPCを接続した場合、コリジョンドメインは10個に分離されることとなる。
そういう意味で「L2スイッチも接続を切断する」と言えるが、その切断のしかたはルータとは異なる。
ルータはブロードキャストドメインを切断するので、適切なルーティングをおこなわないとノード間で通信ができない、という意味での切断である。
L2スイッチの場合は、受信する必要のないフレームを受信しなくてすむ、という消極的な切断である。だから、ハブで接続していたのをスイッチに置き換えたからといって、各ノード間で通信ができなくなることはない。
ハブとL2スイッチの違いを示す具体的な例をあげると、
たとえばオフィスのある島で10人がひとつのハブ(バカハブ)に接続してメールの送受信をしていたとすると、ある人のpopアクセスのやりとりを別の人が自分のPCのNICをキャプチャすることで覗き見ることができる。
実際に私はそのような状況で、他人のパスワードを盗み見たことがある(メールは読んでない)。
ハブをL2スイッチに置き換えることの利点は、主に不要なフラッディングをなくして、ネットワークの利用効率を上げることである。
つまり、「遅くならない」ようにする。ハブのときと比べると「速くなった」と感じるかもしれない。
「L2スイッチの方が高性能だから転送が速い」ということではなく、余計なフレームの送受信が減ったために相対的に速くなったように感じるのみである。
「トランスペアレントブリッジ」って何だ?
「ルートキャッシング」、「トポロジベース」について
「ルートキャッシング」というのは、一度転送をおこなったらそれをキャッシュに残しておき次回はそれを参照する、というもののようだ。
「トポロジベース」というのは、個々のフローに応じて転送を行うのではなく、ネットワークトポロジを格納しておりそれを参照して転送をおこなうもの。そのトポロジとは、つまりルータのルーティングテーブルのようなものであろう。しかし、どうしてルーティングテーブルと呼ばないのか?ルーティングじゃないから、か。では「ルーティング」と「L3転送」の違いは?
これについて納得いく説明はできないし聞いたこともない。
スパニングツリー・・・。
トラウマになっていると言っていいくらい、苦手である。
実際に使ったこともないし。
実際に使ったこともないし。
VTPにしても、etherchannelのネゴにしても、STPにしても、あまり必要性を感じない。
どれもしっかり設計・管理すれば不要な機能である。
むしろ、ネットワークの変化に動的に対応すると予想しない動作をしてよくないのではないだろうか?
きっとそういうポリシーの人もいるだろう。
むしろ、ネットワークの変化に動的に対応すると予想しない動作をしてよくないのではないだろうか?
きっとそういうポリシーの人もいるだろう。
etherchannelの silent modeというのは、前回BCMSNを受験したときにはなかったトピックである。
最近追加された機能なのだろうか?
このモードはデフォルトで有効であり、この場合相手からネゴシエーションをされなくてもetherchannelが有効になるとのことである。
となると、デフォルトではもしかして、on/auto/desirableのどの組み合わせでも有効になるのではないか?
このモードはデフォルトで有効であり、この場合相手からネゴシエーションをされなくてもetherchannelが有効になるとのことである。
となると、デフォルトではもしかして、on/auto/desirableのどの組み合わせでも有効になるのではないか?
この辺は実機で確認せねばなるまい。
catalyst2950を3台オークションで買った。1万円もしない。
前回、もう3年くらい前は、たしか1台1万くらいじゃなかったかな?
前回、もう3年くらい前は、たしか1台1万くらいじゃなかったかな?
ブリッジングループの発生メカニズムについては、前回の試験でもよく読んだし、自分でも納得済みのことであるが、大事な原則なので、あらためて確認しておく。
switch A, BがともにPC1, PC2からのフレームを未受信でアドレス学習をおこなっていない状態であるとする。
このときPC1はPC2のMACアドレスを知っているとする。
2台のSwitchがフレーム未受信で、PC1がPC2のMACアドレスを知っている状態というのは、
PC1がarpによりPC2のMACを学習した後、PC1とPC2の間の通信がなくSwitchA,Bのアドレス学習のみエージアウトし、しかしPC1のarpテーブルはエージアウトしていないような場合が考えられる。
あるいは、あまりないがPC1でスタティックにarpテーブルを設定した場合。
このときPC1はPC2のMACアドレスを知っているとする。
2台のSwitchがフレーム未受信で、PC1がPC2のMACアドレスを知っている状態というのは、
PC1がarpによりPC2のMACを学習した後、PC1とPC2の間の通信がなくSwitchA,Bのアドレス学習のみエージアウトし、しかしPC1のarpテーブルはエージアウトしていないような場合が考えられる。
あるいは、あまりないがPC1でスタティックにarpテーブルを設定した場合。
その状態でPC1からPC2あてに「フレーム」が送信されたときの話。
「フレーム」というのは、送信されるデータをLayer2で捉えたときの呼び方である。それはpingのecho requestであるかもしれない。それは普通「パケット」と言う。イーサヘッダが先にあって、その後にIPヘッダがつく。フレームとして考えるとIPヘッダは「フレームのデータの一部」ということになる。
pingしたときにパケットキャプチャすると、イーサヘッダも見える。実際にノードやスイッチが送受信しているものはイーサヘッダまで含んだ「フレーム」である。
「パケット」という時は、イーサヘッダ以降の部分、つまり、フレームの一部を指す。
イーサネットフレームの最大長は1518オクテット(VLANタグも含めると1522)、
IPパケット(ヘッダ+データ部)の最大長は65536バイトである。
「バイト」と「オクテット」であるが、これは両方8ビットなので同じことなのだが、L2では「オクテット」と呼ぶことになっている。
これはなぜかというと、昔は1バイトが8ビットではない場合があったためだそうだ。
これはなぜかというと、昔は1バイトが8ビットではない場合があったためだそうだ。
というわけで、IPパケットはフレームの一部分なのであるが、IPパケットの方が最大長が大きいため、フレームに収まらない場合がある。そのときは分割して送信する。
ちょっと話がそれて基本的なことの確認になってしまったが久しぶりなので許して欲しい。
さて、PC1からPC2にフレームが送信される、ということであった。
どのようなフレームであるかはどうでもいいのだが、なるべく具体的なイメージがつかめるように、
pingのecho requestのIPパケット(を含むフレーム)であったとしよう。
pingはサイズ指定できるがそれをせずに64バイトの普通のpingだったとしよう。つまり、フレームも1個であった。
アドレス解決は済んでいたので、arp requestも送信されず、いきなりecho requestが飛んだ。
MACアドレスは PC1が 0001.0001.0001, PC2が0002.0002.0002だったとする。
送信されるフレームヘッダにはSRC:0001.0001.0001, DST:0002.0002.0002 と書かれている。
Switch Aが、port1でこのフレームを受信した。
ヘッダを見る。まずport1とPC1のMACアドレス 0001.0001.0001を記憶する。
ヘッダを見る。まずport1とPC1のMACアドレス 0001.0001.0001を記憶する。
次に、あて先を見る。0002.0002.0002は初見あるいはかつて学習したがエージアウトして今は宛先(どのポートから送信するか)が不明なアドレスである。
このときSwitchは受信したポート以外のすべてのポートからフレームを送信する。これをフラッディングという。
送信するフレームは受信したフレームとまったく同じものである。
SwitchBは、port2とport3でまったく同じフレームを受信する。
このときはどうなるのかな・・・同時に送られるのだがSwitchがアドレス学習をするのはひとつずつだろうから、後から受信したフレームで学習したアドレスを記憶するのだろうか(不明)。
この場合は「port3がPC1へ送信するポートである」と学習したとする。
SwitchBもPC2のMACアドレスを知らないため、フラッディングする。フラッディングされるポートはどこか?port1のみか?
このときSwitchは受信したポート以外のすべてのポートからフレームを送信する。これをフラッディングという。
送信するフレームは受信したフレームとまったく同じものである。
SwitchBは、port2とport3でまったく同じフレームを受信する。
このときはどうなるのかな・・・同時に送られるのだがSwitchがアドレス学習をするのはひとつずつだろうから、後から受信したフレームで学習したアドレスを記憶するのだろうか(不明)。
この場合は「port3がPC1へ送信するポートである」と学習したとする。
SwitchBもPC2のMACアドレスを知らないため、フラッディングする。フラッディングされるポートはどこか?port1のみか?
これはちょっとややこしい。
SwitchBがport2でフレームを受信した瞬間に、宛先へのフラッディングをおこなう。このときはport1,3から送信される。
だがほぼ同時にport3でも同じフレームを受信している。
このときのSwitchの動作はどういう順序でおこなうのか?
port2でのフレーム受信→port1とport3からのフラッディング→port3でのフレーム受信→port2とport1からのフラッディング
だろうか?
あるいはフラッディングの前に後からのフレーム受信処理が割り込むことがあるだろうか?
port2でのフレーム受信→port3でのフレーム受信
→por2とport1からのフラッディング
フラッディングしているフレームはPC1からPC2宛てに送信されたものであった。
SwitchAは、macアドレスとポートの対応表を更新することになる。
PC1はport2に接続しているということになってしまうのである。
・・・「だからループが発生してしまうのでSTPが必要なんですね?」
と考えるのは、これからSTPを学ぶということになっているからであるが、
「L2スイッチのアドレス学習に問題があるんじゃないですか?」
と言う人がいてもおかしくないだろう。
ブリッジングループが発生しないようなアドレス学習方法はないだろうか?
STPはアドレス学習方法そのものは変更せずにループを防ぐ方法であるが、
アドレス学習方法そのものを改良できないだろうか?
SwitchAは、macアドレスとポートの対応表を更新することになる。
PC1はport2に接続しているということになってしまうのである。
・・・「だからループが発生してしまうのでSTPが必要なんですね?」
と考えるのは、これからSTPを学ぶということになっているからであるが、
「L2スイッチのアドレス学習に問題があるんじゃないですか?」
と言う人がいてもおかしくないだろう。
ブリッジングループが発生しないようなアドレス学習方法はないだろうか?
STPはアドレス学習方法そのものは変更せずにループを防ぐ方法であるが、
アドレス学習方法そのものを改良できないだろうか?
これはCCNP試験の範囲から逸脱するどころの脱線ではないがちょっとだけ考えてみよう、せっかくだから。
まず思いつくのは、フレームを異なるポートから受信したからといって即そのポートに接続先が変わったとみなすのをやめてはどうか、という事だ。
でもそれをしないと接続ポート変更にどうやって対応するのか、ということになる。
たとえば1回受信しただけでは更新しないとか、直後(一定の時間内)なら更新しないとか・・・
フラッディングするフレームには印をつけるとか・・・。
たとえ学習済みのsrc macアドレスのフレームであってもフラッディングされたものであったら更新しない。
いちいちフラッディングされたかを確認しなければならないということを除けばうまくいきそうに思えるが・・・
ループ発生の根本的な原因はフラッディングにある。
フラッディングとは要するにフレームの複製である。本物のフレーム以外のニセモノが複数作成されてしまうのだ。これが実際に接続していないポートに接続していると誤認してしまう原因だ。
では、このフラッディングをやめてはどうか?
つまり、送信先のアドレス学習をしないのである。
これはダメか・・・。
同じスイッチの二つのポートに通信をおこなう装置が接続されていれば双方が何か送信すれば通信がおこなえるが、スイッチ同士を接続したらその間の通信がいつまでたってもできなくなる。
ルーティングのように、macアドレスを広告しなければならなくなる。では、このフラッディングをやめてはどうか?
つまり、送信先のアドレス学習をしないのである。
これはダメか・・・。
同じスイッチの二つのポートに通信をおこなう装置が接続されていれば双方が何か送信すれば通信がおこなえるが、スイッチ同士を接続したらその間の通信がいつまでたってもできなくなる。
今更だが「ハブとスイッチの違い」を調べた。
ハブというのは、全部フラッディングする装置である。
スイッチは、アドレス解決のためにフラッディングをする、というよりは、
受信フレームのsrc MACとポートを記憶しておくことにより、余計なフラッディングをしないようにしたのだ。
通信というのはあたかもケーブルの中を小包のようなものが流れていくようなイメージがあり実際にそのように説明されることが多いが、あれは全部コピーなのだ。あるパソコンからパケットは、スイッチに到達するとそこでコピーして違うポートから送信される。それがルータに到達したら今度はルーティングなどの処理をおこなってまた別のインタフェースからコピーして送信される。
通信とは複製なのであった。
今更過ぎるか・・・・
スイッチは、アドレス解決のためにフラッディングをする、というよりは、
受信フレームのsrc MACとポートを記憶しておくことにより、余計なフラッディングをしないようにしたのだ。
通信というのはあたかもケーブルの中を小包のようなものが流れていくようなイメージがあり実際にそのように説明されることが多いが、あれは全部コピーなのだ。あるパソコンからパケットは、スイッチに到達するとそこでコピーして違うポートから送信される。それがルータに到達したら今度はルーティングなどの処理をおこなってまた別のインタフェースからコピーして送信される。
通信とは複製なのであった。
今更過ぎるか・・・・
「ハブ」「ブリッジ」「スイッチ(スイッチングハブ)」の違い。
ごく少数の装置を「つなげる」だけであれば、この3つは区別がつかないだろう。
もっとも、今ではハブやブリッジを入手することは困難である。
(もう製造されていないか?)
ハブとスイッチの違いは比較的わかりやすいが、ブリッジとスイッチは難しい。私は今説明できない。
昔、後輩に聞かれたことがあるがちゃんと答えられなかった記憶がある。
今もネットを探すと「同じと考えて差し支えない」みたいな人も多い。
今もネットを探すと「同じと考えて差し支えない」みたいな人も多い。
簡単に言ってしまうと「スイッチ」とは「高性能なブリッジ」ということになる。
ブリッジという装置が登場したときは、2ポートしかなかったそうだ。
各ポートにハブをつないで使っていたのか。
やがて2つじゃ少ないというので、「マルチポートブリッジ」が登場した。
しかしこれはただブリッジをくっつけただけで、動作原理はブリッジとまったく同じだった。
それが「スイッチ(スイッチングハブ)」と呼ばれるようになったのは、どのような革新があったからなのか。
初期の2ポートのブリッジは、10Base2とか10Base5とかのバス方式で使われていた。
バス方式というのはもう見かけないが、一本のケーブルに複数のノードがぶら下がる方式だ。
バス方式では全二重通信ができない。
これは同軸ケーブルを使っていたためである。
バス方式では全二重通信ができない。
これは同軸ケーブルを使っていたためである。
それは置いといて、ブリッジとスイッチの一番本質的な違いは何か?
名前からして、ブリッジは架け橋、接続するものであり、スイッチは単なる接続ではなく、切り替えつまり選択する機能を持つ。となるとやはり「マルチポートである」ということだろうか?
HW処理とSW処理というのは確かに大きな違いで転送速度などにも大きく影響するだろうが、動作原理の違いという観点からすると本質的な違いではない。
HW処理とSW処理というのは確かに大きな違いで転送速度などにも大きく影響するだろうが、動作原理の違いという観点からすると本質的な違いではない。
転送方式の違いつまり全部読み込む前に転送を開始する、というのも革新的なことではあっただろうが、やはり機能改善にすぎず本質的な違いではないように思う。
ちょっと深入りしすぎたかな・・・
これくらいにしておくか・・・
やっぱりマルチポートであることですかね。
3つ以上になるということは、右から左へ受け流すだけではなく、受け取ったフレームを残る2つ(またはそれより多く)のポートのどこから送出するかを判断する必要がある。
わかった!!!
わかった!!!
初期のブリッジは2ポートであった、これが重要である。
そして、ブリッジもL2スイッチと同様のフラッディングによるアドレス学習をおこなうのであるが、
そもそも2ポートしかないのだから、出口は一個しかなくて選択の余地がないから全部そこへ送ってしまえばよさそうなものである。
でも、それではハブと変わらない。
ブリッジがアドレスを学習するのは、出力ポートの選択が目的ではないのである。
目的は、不要なフラッディングをしないようにすることである。
そもそも2ポートしかないのだから、出口は一個しかなくて選択の余地がないから全部そこへ送ってしまえばよさそうなものである。
でも、それではハブと変わらない。
ブリッジがアドレスを学習するのは、出力ポートの選択が目的ではないのである。
目的は、不要なフラッディングをしないようにすることである。
アドレス学習の原理はブリッジとスイッチで変わりなく、その目的も不要なフラッディングの防止ということで同じである。
しかし、マルチポートになったことによって、本来は単なる不要なフラッディングの防止のためでしかなかったアドレス学習に、出力ポートの選択という新たな目的が加わったのである。
そうなると、マルチポートブリッジの機能は複数のコリジョンドメインを接続(本当は分離なのだが)するというよりも、複数のコリジョンドメイン間でフレームの出力先を判定して振り分ける機能が主要になった。それによって、「ブリッジ」という呼び名が「スイッチ」となったのである。
私はまずスイッチからその動作原理を学習し始め、そのときに「アドレス学習は出力ポート選択のため」と認識していたのだが、実はこれは副次的な目的であって、主目的はやはり「不要なフラッディングの抑制」なのだった。
やはり、通信機器というのは、その機能するレイヤーが上位に行くほど、通信が抑制される。
基本は全コピー。なんでもかんでもコピーしてばらまく。そうすればとりあえず届く。
でもそうすると余計な送受信が発生するので、それを減らすような装置が必要となり、スイッチやルータが登場した。
これで整理がついた。
こんなのは当たり前なのかもしれないが、ちゃんと説明できる人はすごく少ないと思う。
少なくとも私は納得のいく説明を聞いたことがない。
以前、「スイッチはネットワークを拡大する装置だ」なんてことを書いた記憶があるのだが、それは大きな間違いであった。
スイッチの目的はコリジョンドメインの分離であった。
2012/01/26
IEからchromeへ
アマレクTV、録画もできる。
IE派の私であったが、最近chromeに変えた。IEは8まで使っていたがいまひとつで、待望していた9はWindows7でないと使えない上に、ベータか何かを使ったときにchromeとそっくりだったので、だったらchromeを使おう、ということになった。
IEは、アドレスバーとタブが横に並んでいるため、たくさんページを開くとどんどんアドレスバーが狭くなる。 アドレスバーは検索窓も兼ねるようになったため、これは不都合である。 chromeはタブがアドレスバーの上にあるので重ならない。
そして、Windows7を使い始めたのでIE9を久しぶりに使ってみたのだが、やっぱり遅い。 というか、chromeがクソ速い。それはchromeが出た直後にも驚いたことなのだが、改めて思い知った。firefoxは、使わない。
IE派の私であったが、最近chromeに変えた。IEは8まで使っていたがいまひとつで、待望していた9はWindows7でないと使えない上に、ベータか何かを使ったときにchromeとそっくりだったので、だったらchromeを使おう、ということになった。
IEは、アドレスバーとタブが横に並んでいるため、たくさんページを開くとどんどんアドレスバーが狭くなる。 アドレスバーは検索窓も兼ねるようになったため、これは不都合である。 chromeはタブがアドレスバーの上にあるので重ならない。
そして、Windows7を使い始めたのでIE9を久しぶりに使ってみたのだが、やっぱり遅い。 というか、chromeがクソ速い。それはchromeが出た直後にも驚いたことなのだが、改めて思い知った。firefoxは、使わない。
2012/01/05
saslauthd
sshdのポート番号を変えました。ピタリと止んだ(というか、見えなくなっただけか)。
ドメインをもう一個とって、マルチドメインとした。 レンタルサーバを借りたのだが、VPSでマルチドメインにすればいいと気づいてキャンセルした。 httpd.confの一番下にコメントアウトされている<VirtualHost>セクションがあるので、 そこでDocumentRootのフォルダ名やログファイル名を設定する。 DocumentRootのフォルダを作成する。 取得したドメインのAレコードのアドレスをVPSサーバのアドレスにする。 DocumentRootにファイルを置く。 httpdをrestartする。 これだけ。
saslauthdのログがsecureに・・・なんだこれ ?
そもそもsaslauthdって何だ? 停めようかな・・・
Sat Jun 16 16:12:41 2012
停めた。
ドメインをもう一個とって、マルチドメインとした。 レンタルサーバを借りたのだが、VPSでマルチドメインにすればいいと気づいてキャンセルした。 httpd.confの一番下にコメントアウトされている<VirtualHost>セクションがあるので、 そこでDocumentRootのフォルダ名やログファイル名を設定する。 DocumentRootのフォルダを作成する。 取得したドメインのAレコードのアドレスをVPSサーバのアドレスにする。 DocumentRootにファイルを置く。 httpdをrestartする。 これだけ。
saslauthdのログがsecureに・・・なんだこれ ?
そもそもsaslauthdって何だ? 停めようかな・・・
Sat Jun 16 16:12:41 2012
停めた。
2011/12/28
sendmail
不正アクセスの試みが絶えない。 とりあえずftpdは起動しない。 sshdとsendmailは止めるわけにはいかない。
外部からのmailは転送できてlocalhostがダメってどういうことだ?
これがデフォルトなのですが、ポート番号を変え、さらに外部のメールを転送するために以下の様にしました。
しかしこうすると、外部のメール(つまりパソコンのメールソフトから送信する)は可能なのですが、サーバにsshでログインして
とかやると、送信できないのです。 デフォルト設定に戻すとローカルの送信は可能になりますが外部から送信できない。 ローカルでも外部からも送信できる方法はないのだろうか? ローカルでmailコマンドを実行すると port 25になっているのか? mailコマンドでポート番号を指定する方法があるのか・・・? わからない!
とりあえず外部からメールを送る必要はないので、デフォルト設定に戻した。タダ不思議なのは、以前は両方できてたはずだということ。 それがbugzillaをインストールしてbugzillaからメールを送ろうとしたらできず、 あれと思って外部から送信したらそれもできなかった。 メールクライアントで認証設定を追加したら送れるようになった。 何も変えていないはずなのに・・・
を作成する方法が紹介されていた・・・しかしこのファイルはデフォルトでは存在しない・・・587にポートを変更するから特別な設定が必要なのか・・・ メンドクサイ・・・そもそもなんで25を587に変えたんだっけ・・・ たしか25では送信できなかったからだ・・・ 別に25が587に変わったから何だって言うんだ・・・スパマーが587に来たら同じ事じゃないのか・・・わけがわからん・・・
sendmailの設定( sendmail.mc → sendmail.cf )でポートをデフォルト(25)にし、iptablesでも25を開けているのに、 どうしても port 25が開かないのである。 サーバにsshで入って telnet localhost 25 とやればsendmailに接続できるのだが自宅のPCからはできず、nmapしてみると25が開いていない。サーバでnetstatした結果は 25 と 587以外に違いはないようだが・・・sendmailの設定とiptables以外に、ポートを制限する設定があるのだろうか?
25が開かないのはおそらくさくらのVPSの仕様(?)なのでしょう。 正確には「25が開かない」のではない。サーバでは開いているが、その手前でブロックしているのではないでしょうか。ルータかなんかで。本当はブロックしてはいけないはずですが、まあ25を使うのは危険のようだからそれはよしとしましょう。そして 587を使うとローカルからメールが送信できない理由は、どうもmailコマンドを使った場合認証しないからのようです。
とやったときに、アクセスするのはローカルのsendmailなのですが、ここで認証をしていないので送れないのです。外部のPCのメールソフトで「送信サーバには認証が必要」を設定しないようなものです。 mailコマンドで認証させる方法をman mailとかネットで検索してみましたがどうもないようで、それをさせるのが authinfoファイルを使うやり方のようです。ここにユーザ名とパスワードを設定するようです。
外部からのmailは転送できてlocalhostがダメってどういうことだ?
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
これがデフォルトなのですが、ポート番号を変え、さらに外部のメールを転送するために以下の様にしました。
DAEMON_OPTIONS(`Port=587,Name=MTA')dnl
しかしこうすると、外部のメール(つまりパソコンのメールソフトから送信する)は可能なのですが、サーバにsshでログインして
echo aiueo|mail root
とかやると、送信できないのです。 デフォルト設定に戻すとローカルの送信は可能になりますが外部から送信できない。 ローカルでも外部からも送信できる方法はないのだろうか? ローカルでmailコマンドを実行すると port 25になっているのか? mailコマンドでポート番号を指定する方法があるのか・・・? わからない!
とりあえず外部からメールを送る必要はないので、デフォルト設定に戻した。タダ不思議なのは、以前は両方できてたはずだということ。 それがbugzillaをインストールしてbugzillaからメールを送ろうとしたらできず、 あれと思って外部から送信したらそれもできなかった。 メールクライアントで認証設定を追加したら送れるようになった。 何も変えていないはずなのに・・・
/etc/mail/authinfo
を作成する方法が紹介されていた・・・しかしこのファイルはデフォルトでは存在しない・・・587にポートを変更するから特別な設定が必要なのか・・・ メンドクサイ・・・そもそもなんで25を587に変えたんだっけ・・・ たしか25では送信できなかったからだ・・・ 別に25が587に変わったから何だって言うんだ・・・スパマーが587に来たら同じ事じゃないのか・・・わけがわからん・・・
sendmailの設定( sendmail.mc → sendmail.cf )でポートをデフォルト(25)にし、iptablesでも25を開けているのに、 どうしても port 25が開かないのである。 サーバにsshで入って telnet localhost 25 とやればsendmailに接続できるのだが自宅のPCからはできず、nmapしてみると25が開いていない。サーバでnetstatした結果は 25 と 587以外に違いはないようだが・・・sendmailの設定とiptables以外に、ポートを制限する設定があるのだろうか?
25が開かないのはおそらくさくらのVPSの仕様(?)なのでしょう。 正確には「25が開かない」のではない。サーバでは開いているが、その手前でブロックしているのではないでしょうか。ルータかなんかで。本当はブロックしてはいけないはずですが、まあ25を使うのは危険のようだからそれはよしとしましょう。そして 587を使うとローカルからメールが送信できない理由は、どうもmailコマンドを使った場合認証しないからのようです。
echo test|mail root
とやったときに、アクセスするのはローカルのsendmailなのですが、ここで認証をしていないので送れないのです。外部のPCのメールソフトで「送信サーバには認証が必要」を設定しないようなものです。 mailコマンドで認証させる方法をman mailとかネットで検索してみましたがどうもないようで、それをさせるのが authinfoファイルを使うやり方のようです。ここにユーザ名とパスワードを設定するようです。
