A Day In The Boy's Life -137ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

かなりレアな環境かと思いますが、WINSやDNSサーバーが存在しないネットワーク環境において、Active Directoryドメインを利用したい(ドメインコントローラと通信したい)という場合でも、設定によってはできますよ、と言う話。


設定方法は、lmhostsファイルにドメインコントローラの情報を書いておき、NICに読み込ませておくという方法になります。



lmhostsファイルの準備


まず、lmhostsファイルを準備します。

lmhostsファイルは、hostsファイルのようにそのホスト名とIPアドレスを記載することで、NetBIOS系のホストを名前解決させるためのファイルとなります。

これによりWINSサーバーが存在しない環境でも、このファイルを参照させることでNetBIOS名を名前解決させることができるようになります。


lmhostsファイルが保存されているファイルのパスは、環境によって異なりますがWindowsXPの場合は


C:\WINDOWS\system32\drivers\etc

に存在します。

デフォルトでは、lmhosts.samというサンプルファイルがありますので、それを利用してオリジナルを作るようにすればよいでしょう。

lmhostsファイルは、下記のように記述します。


192.168.0.100	myserver	#PRE #DOM:MYDOMAIN  #net group's DC
192.168.0.100	"MYDOMAIN       \0x1B"  #PRE

1行目には、IPアドレス、ホスト名(myserver)、キャッシュ方法(#PRE)、ドメインコントローラの情報(#DOM:MYDOMAIN)を書いてます。

2行目は、IPアドレスとNetBIOSサフィックス付のNetBIOS名、そして同じようにキャッシュ方法(#PRE)を書いています。


2行目に書いているNetBIOS名は、16Byte固定になるように書かなくてはなりません。

最後の「\0x1B」はNetBIOSサフィックスを16進数であらわしたもので、上記の例の場合はドメインマスタブラウザをさしています。

これについては、下記サイトに詳細が書かれています。


NetBIOS サフィックス (NetBIOS 名の 16 番目の文字) @ Microsoftサポートオンライン



lmhostsファイルの読み込み


lmhostsファイルの準備ができたら、今度はそのファイルを利用するネットワークに接続しているNICに読み込ませます。


まずマイネットワークから、該当のNICのプロパティを開きます。


A Day In The Boy’s Life-ネットワーク接続のプロパティ


次に、「インターネットプロトコル(TCP/IP)」を選択して「プロパティ」を開きます。


A Day In The Boy’s Life-TCP/IPのプロパティ


次に、画面内にある「詳細設定」ボタンをクリックします。

そして、開いた画面の「WINS」タブをクリックし、その中にある「LMHOSTSのインポート」ボタンから、先ほど書いたlmhostsファイルを指定すれば完了です。


A Day In The Boy’s Life-TCP/IPの詳細設定


準備ができたらlmhostsファイルが有効に働いているかを確認します。

コマンドプロンプトを開き、下記のようにドメインコントローラと通信ができているか状況を確認してみます。


C:\Documents and Settings\itboy>nbtstat -c

ローカル エリア接続 5:
Node IpAddress: [192.168.0.10] Scope Id: []

                  NetBIOS Remote Cache Name Table

        Name              Type       Host Address    Life [sec]
    ------------------------------------------------------------
    MYDOMAIN	   <1C>  GROUP           192.168.0.100       -1
    MYDOMAIN	   <1B>  UNIQUE          192.168.0.100       -1

もし、設定が反映されていないようであれば、「nbtstat -R」コマンドを実行することでlmhostsファイルの内容を即時に読み込むことができます。


これでWINSやDNSが存在しない環境でもActive Directoryを利用することができるようになります。

ただし、使ってみた感じだとかなりレスポンスが悪い点と、WINSやDNSが存在しないことによる弊害がその他のアプリケーションなどにでる可能性が高いので、その辺りの調整が必要になってくるかと思います。


【参考】

ドメインの検証および他の名前解決に関する問題のために LMHOSTS ファイルを記述する方法 @ Microsoftサポートオンライン





企業内ウィキにシグネチャを: 第 1 回 ウィキサイトの規模不足を考える @ IBM developerWorks


企業内ウィキにシグネチャを: 第 2 回 シグネチャによるウィキへの参加動機の強化 @ IBM developerWorks


企業内ウィキにシグネチャを: 第 3 回 企業内ウィキでのシグネチャの役割 @ IBM developerWorks


これ読んで今まで自分が思ってたなんかもやもやした感じが晴れたような気がします。

これまで幾つか書いた記事の中を一気にまとめ上げたような記事で、読んでかなり納得してしまいました。

今まで書いたことと、このエントリを読んで感じたこをまとめて書いてみます。



Wikiを活用してくれる人の割合


1つ目は、やはりWikipediaのような情報共有ツールはそのまま持ってきてもうまくいかないのだなということ。

社員一人一人に書き込む動機がないと言う点はその通りだと思いますし、仮に動機の沸点が低い人(ちょっとしたことにやりがいを感じてくれる人)はかなりの少数派であると言うこともわかります。


- Enterprise2.0を作る人たち、支える人たち

例えばあなたが勤める情報システム部門に100名の従業員がいて、その中で自分が業務の対象としている、ある分野に対して社内のブログやWikiで積極的に情報を発信していったとします。
その他にも、積極的に情報を発信している人がいますが、その割合は全体ではそこまで多くありません。
パレートの法則に準えれば、それは2割程度の人たちによって発信されている事になります。
20名が、残りの80名のためにせっせと情報を生み出しているわけです。
そして、先の話と同じように特定分野での情報となるとさらに対応者は少なくなります。
2名か3名か、もしかしたらあなた1人でである分野について情報を発信し続ける事になります。

Wikipediaでさえ読む人から見て書き込む人の割合は、約0.003%と書いていますからこんなレベルでないことはわかります。

企業内で適当な書き込み者を求めるとなると、どれだけWikiの利用者を求めないといけなくなるか、それを考えると多くの企業ではそれが利用できないと言う判断を簡単に下すことは簡単です。



Wikiを活用する動機


社内でWikiを活用しないのは、活用事によるメリットがないと言うことになります。

もちろん自分に優位な情報は積極的に集めるでしょう。

ですがその逆の行動はなかなかとろうとしません。

結果として情報が溜め込まれないWikiは見ても変化のないもので、そこから知識を奪うだけ奪った人は無用の長物と化します。


- ナレッジを共有する!って前に考えること

Wikipediaの記事のレベルが低いって言う人がいますけど、そんな人でも共有しようと言う意識があるだけましではないかなと思います。
たとえ、それが内輪で「あの記事の内容ほとんど俺が書いたんだぜ」という程度の自慢をするために書いた、という動機であったとしても。
その人は、Wikipediaに書くことのメリットを感じているわけです。

先ほども言った動機の沸点が低い人というのはある種、特異体質の人だという印象を受けます。

自分が持っている情報の重要性を認識していたり、それを共有することで小さくとも変化を起こそうと言う前向きな姿勢を持っていたり。

ただ、全ての人にそういう意識を持てと言うのは少し酷だと思いますし、少なからず持ってたとしても、それがその行動に出る動機を超えることがなかなかありません。

その行動を取ることで得られること(例えば社内の地位や給料とか)と失うもの(例えばそれに費やす時間とか)を天秤にかけると失うものの方が上だと感じてしまいます。


例え情報共有が進み、それによって自分の仕事の労力が幾分減るとわかってても、未来の数時間を削るためにとる、今の数十分の行動のほうが無駄に感じてしまいます。

それだけ、社内のWikiを使うこと(というよりは情報共有を進めようとすること)への動機というのは見当たらないのが現状だと思います。



Wikiへの貢献度を可視化することによって得られること


最後に、その動機を作るために貢献度を可視化しようという取り組みはかなり納得がいきました。

誰が書いたエントリなのかと言うことがわかり、その名前が良く目につけば、その人の積極性が目に見えて理解できます。

そういう人を頼ろうとする社員も出てくると思いますし。


そういうことによって社内で情報の共有化を推し進める人を別の角度からねぎらうこともできます。

単に貢献度が高いからインセンティブを与えようとか、そういう方法なしに参加者の動機を上げられるのではないかなと。全てがお金で換算できれば良いと考えている人ばかりではないと思います。

自分が頼りにされているという印象を周りから得られることでモチベーションにつながりますし、一人でも感謝を告げられる人が出てくれば、その人のためにやっていると言う目的を見出すこともできます。


- 会社の人たちが仕事でWikiを使ってくれない

さらに、メールは複数人に送れるとはいえ、名指しして送ることが多いですので、1対1のコミュニケーションツールの感覚を持ちますが、Wikiの場合、不特定多数に発信するため、自分が誰のために書いているのかわからない、読まれるかどうか不安という感覚を持っているのではとも思います。

あの分野はあの人が得意だから聞いてみようという信頼感がうまれ、それによって誰かに頼りにされているという感覚とが入り混じって、情報発信者の動機は協力になっていくスパイラルが生まれるだろうなと。

こういうのは、ブログとかも同じで誰か見ず知らずの人からもらったコメントがうれしかったりしてそれが動機になって続けているという人も多いかと思います。


私でも誰かの役に立つ情報を発信できるかもしれないと言う、そういう良い循環が促進されることでWikiなど情報共有のツールって活用されていくのだろうなと。

強いては、そういう文化を社内に根付かせることが大切なのかなと感じました。





普段からサーバー管理などで良く使うFTPですが、ひとえにFTPといっても内部的には2つの通信モード(アクティブモード(ポートモード)パッシブモード)が存在しています。

この辺の問題に絡み、FTPを設定したけどサーバーとうまく通信ができないなどの問題が起きる可能性もでてきますので、どっちのモードで動かすのが良いのかを理解しておく必要が出てきます。


まず、FTPの通信には2つのコネクションが必要になります。


1. FTPのコマンドなどをやり取りする制御用のコネクション

2. FTPを用いてデータやサーバー情報を転送をするためのコネクション


このうち2.のデータ転送用のコネクションの扱い方が2つの通信モードによって異なってきます。

具体的に2つの通信モードにて、サーバーへのFTPコネクションの確立からサーバー情報の取得までの流れを見てみたいと思います。


今回確認する構成は、下記のようになっています。


クライアント(192.168.0.100) → サーバー(192.168.0.200)


※ いづれもLinux環境です。



パッシブモードによる通信


まずパッシブモードによって通信の流れを見てみます。
最近のFTPクライアントの多くは、デフォルトでパッシブモードの通信を採用してたりします。


# ftp
ftp> open 192.168.0.200
Connected to 192.168.0.200.
220 (vsFTPd 1.2.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type

Name (192.168.0.200:root): foo
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

デフォルトでパッシブモードの通信となるため明示的に指定はしていませんが、これでパッシブモードによるFTP接続ができました。

まず、このときの通信状況を見てみます。


# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.100:41900         192.168.0.200:21         ESTABLISHED

# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.200:21            192.168.0.100:41900      ESTABLISHED

クライアントからサーバーのポート21番へのコネクションが、制御用のコネクションです。
クライアントのポート番号は任意ですので接続のたびに変わります。


次に、クライアントからファイルをPUTしてみます。


ftp> put hoge.txt
local: hoge.txt remote: hoge.txt
227 Entering Passive Mode (192,168,0,200,4,74)
150 Ok to send data.

このときの通信状況を見てみると


# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0  95568 192.168.0.100:40886         10.100.0.240:1086        ESTABLISHED
tcp        0      0 192.168.0.100:41900         10.100.0.240:21          ESTABLISHED

# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.200:1086          192.168.0.100:40886      ESTABLISHED
tcp        0      0 192.168.0.200:21            192.168.0.100:41900      ESTABLISHED

いづれも下に表示されている21番ポートは先ほど接続している制御用コネクションですが、その上のサーバー側のポート1086番に接続しているのがデータ転送用のコネクションです。

クライアント側の40886番ポートは接続のたびに変わりますが、サーバー側の1086番ポートは、サーバー側の設定によりある範囲に固定することができます(後述)


パッシブモードを図示すると下記のようになります。


A Day In The Boy&#39;s Life-FTP-パッシブモード



アクティブモード(ポートモード)による通信


次に、アクティブモードによる通信状況を同様に見てみます。


# ftp
ftp> passive
Passive mode off.
ftp> open 192.168.0.200
Connected to 192.168.0.200.
220 (vsFTPd 1.2.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.200:root): foo
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

このときの通信状況を見てみると


# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.100:46674         192.168.0.200:21         ESTABLISHED

# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.200:21            192.168.0.100:46674      ESTABLISHED

ここまではパッシブモードと状況は変わりません。
次に、同じようにファイルをPUTしてみます。


ftp> put hoge.txt
local: hoge.txt remote: hoge.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.

この間の通信を見てみると


# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0  95568 192.168.0.100:59660         192.168.0.200:33468      ESTABLISHED
tcp        0      0 192.168.0.100:46674         192.168.0.200:21         ESTABLISHED

# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address          State
tcp        0      0 192.168.0.200:33468         192.168.0.200:59660      ESTABLISHED
tcp        0      0 192.168.0.200:21            192.168.0.200:46674      ESTABLISHED

サーバー側では59660番ポートを、クライアント側では33468番ポートを使ってデータを転送していることがわかります。

これらの状況からはわかりづらいですが、パッシブモードとアクティブモードとではどちら側から通信を開始するのか、という点が異なります。

FTPのアクティブモードの通信状況を図示すると下記のようになります。


A Day In The Boy&#39;s Life-FTP-アクティブモード


この辺りの動作については、下記の記事がわかりやすく解説されています。


FTPサーバの公開 @ パソコンおやじ


異種なるFTPのサーバ公開方法 @ Kung Noi


アクティブモードの場合は、クライアント側のIPやポートの情報をサーバーに伝え、サーバーから通信を開始してもらい、パッシブモードは逆でサーバーのIPやポート情報をもらって、クライアント側から再度データ転送用のコネクションを開始します。

アクティブモードは、サーバー側から通信を開始するためF/Wに引っかかったり、それを通す工夫をしようとしても使われるポートが不定の為、ACLを書きにくいというような問題があります。

そのために、パッシブモードというもう一つのモードが存在しています。



アクティブモードによるサーバー側の通信ポートの固定


サーバーとクライアントの通信ポートが接続のたびに変わるという状況は、色々不都合があります。

例えば、先の参考にさせていただいた記事の中で書かれているようなNAT環境での問題以外にも、F/WでFTPの通信を許可したいが、アクティブモードでは通信ポートがはっきりしないため、どこまでの範囲の穴を開けておけばよいかがわからないというような問題もあります。

極端に広い範囲で許可をしてしまうと、それはそれでセキュリティ上の問題にもなります。


vsftpdでは、アクティブモードによる通信のサーバー側の通信ポートを固定するオプションがあります。


connect_from_port_20=YES

このオプションを有効にすることでサーバー側のポートが20番に固定されます。

20番以外のポートを使いたい場合は、上記のオプションに加えて下記を指定します。(この場合、3000番ポートを使用)


ftp_data_port=3000

実際にFTPの通信状況を見てみると


tcp        0      0 192.168.0.100:33479          192.168.0.200:3000        ESTABLISHED

tcp        0 101360 192.168.0.200:3000           192.168.0.100:33479       ESTABLISHED


サーバー側のポートが3000番に固定されていることがわかります。

ただし、これは先ほど述べたように通信元のポート番号になるということに注意が必要です。



パッシブモードによるサーバー側の通信ポートの固定


次にパッシブモードの場合です。

パッシブモードの場合は、ポートをある範囲で受け付けるように指定します。


pasv_enable=YES
pasv_min_port=1050
pasv_max_port=1100

上記の場合は、1050番から1100番の範囲のポートが使われます。

こちらは、アクティブモードとは違い、通信先のポート番号になります。


tcp        0      0 192.168.0.100:33486         192.168.0.200:1075        ESTABLISHED

tcp        0 134664 192.168.0.200:1075          192.168.0.100:33486       ESTABLISHED


FTPと言えども採用する通信モードによって、通信の方向と、使われるポート番号が異なるので、環境に応じて適切なモードで運用する必要が出てきます。


2010.01.18 追記

FTPパッシブモードとアクティブモードの通信状況の図を追加