AWSでDFSを構成してみる

AWS上でDFSを構築してみる


# 条件
* 検証様のOS:Windows2008R2
* クライアントもWindows2008R2
* ADはサーバサイドのみで、クライアント側はADに参加させない


# 手順

1. Windows2008R2を6台作成
	* dc01.domain.dfs.local:ドメインコントローラー
	* dc02.domain.dfs.local:ドメインコントローラー
	* fileserver01.domain.dfs.local:名前空間サーバ
	* fileserver02.domain.dfs.local:名前空間サーバ
	* target.domain.dfs.local:実際に共有用ディレクトリを保持するサーバ
	* client:dfs領域にアクセスするクライアント



2. ドメインコントローラーを作成する
	* 役割からドメインコントローラを追加
	* 追加できたらdcpromo.exeでセットアップ
	* 後はよしなに。ADW上ではIPアドレスの配布自体はDHCPなので、動的なIPのままで進める。ただ、DHCPでの割当は固定的。
	* 今回はWindows2008R2互換で作成


3. 名前空間サーバを作成する
	* ドメイン参加
	* 役割からファイルサーバ > 分散ファイルシステムを追加
	* このタイミングでは名前空間の作成はなし
	* DFSルートの2台分作成する

4. 名前空間サーバ上で名前空間を作成する
	* DFS管理ツールから名前空間を作成
	* 名前空間サーバ:`fileserver01.domain.dfs.local`
	* 名前空間の名前と設定→　共有ディレク名を入れる。設定の編集から共有フォルダーのローカルパスが設定できるがここは適当に。デフォルトは`C:¥DFSRoots¥`
	* 名前空間の種類：ドメインベースの名前空間を選択
	* Windows Server2008モードを有効にするにチェック

5. 名前空間サーバの追加
	* 名前空間>作成した名前空間を選択
	* 操作>名前空間サーバの追加を選択
		* 名前空間サーバ：fileserver02

6. ディレクトリの追加
	* 名前空間>作成した名前空間を選択
	* 操作>新しいフォルダー
	* フォルダターゲット：`target.domain.dfs.local`
	* 共有名、共有フォルダーのローカルパスは適当に。

# 動作確認

* 共有名 `domain.dfs.local`について`domain.dfs.localドメイン`に参加しているWindows機から名前解決を試す。
⇒dc01とdc02のIPがかえってくる
* Linuxクライアントでも同じ結果

```
$ dig domain.dfs.local @<dc01のアドレス>

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> domain.dfs.local @<dc01のアドレス>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43716
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.dfs.local.		IN	A

;; ANSWER SECTION:
domain.dfs.local.	600	IN	A	<dc01のアドレス>
domain.dfs.local.	600	IN	A	<dc02のアドレス>

```

TCPdumpでいろいろ挙動を追う事も考えたけど、面倒なのでやめる


* ADに参加しているWindows機より適当にアクセスしてみる
	* `¥¥domain.dfs.local¥<共有名>`
		→読み書きOK
		→`target.domain.dfs.local`のローカル上でもファイルを確認



* AD非参加のマシンからアクセス。
	* 参照DNSをdc01/dc02に向ける。
	* domain.dfs.localもAD参加マシンと同様に名前解決できるがアクセス失敗
	* 認証まではいけたけど、おこられた

```
C:\Users\Administrator>start \\domain.dfs.local\<共有名>
ファイル \\domain.dfs.local\<共有名> が見つかりません。

C:\Users\Administrator>
```

[調べるとこんな記事が](http://webcache.googleusercontent.com/search?q=cache:lh7SGYo9PHYJ:support.microsoft.com/kb/244380/ja+&cd=1&hl=ja&ct=clnk&gl=jp)

どうやら、アクセス先のサーバを列挙する際に、NetBIOS名を返す事もある様。KBに従い、レジストリを変更する。今時NetBIOSとかなんなの。

>DFS サーバー上に DFS のルートまたはレプリカが置かれている場合は、それをサーバーから削除します。DfsDnsConfig パラメータを有効にする前に構成情報を削除し忘れた場合は、dfsutil /clean:computername コマンドを使うと構成情報を削除できます。
レジストリ エディタを起動し、次のキーを開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dfs
DfsDnsConfig 値がある場合は、[編集] メニューの [値の編集] をクリックし、値を 1 に変更します。DfsDnsConfig 値がない場合は、[編集] メニューの [値の追加] をクリックし、次の情報値を追加します。
値の名前 : DfsDnsConfig 
データ型 : REG_DWORD 
データ : 0 または 1

変更後、念のため名前空間サーバを再起動&名前空間の再作成。無事につながる

# 挙動の確認

名前空間サーバの障害時の動作。

* おもむろにマネージメントコンソールから名前空間サーバ1台をstop
* 無事再接続できた。おおよそ30秒ぐらい？
* エクスプローラー上のアドレス表示も変わらず
`\\domain.dfs.local\<共有名>`

他にも挙動を確認しないとダメだけど、取り合えず動く事は動いた。

`domain.dfs.local`はdc01,dc02のアドレスを指しているけど、実際にアクセスするのは名前空間サーバのfileserver01,fileserver02


```title:初回アクセス時
C:\Users\Administrator>
C:\Users\Administrator>
C:\Users\Administrator>start \\domain.dfs.local\<共有名>
C:\Users\Administrator>netstat -an

アクティブな接続

  プロトコル  ローカル アドレス          外部アドレス        状態
 ESTABLISHED
  TCP    <接続元IP>:63708    <fileserver01のIP>:445      
C:\Users\Administrator>
C:\Users\Administrator>
```


```title:fileserver01停止
C:\Users\Administrator>
C:\Users\Administrator>
C:\Users\Administrator>start \\domain.dfs.local\<共有名>

再接続に30秒ぐらいかかった

C:\Users\Administrator>
C:\Users\Administrator>netstat -an

アクティブな接続

  プロトコル  ローカル アドレス          外部アドレス        状態
  TCP    <接続元IP>:63876    169.254.169.254:80     CLOSE_WAIT
  TCP    <接続元IP>:63877    <fileserver02のIP>:445     ESTABLISHED
  TCP    <接続元IP>:63879    <targetのIP>:445      ESTABLISHED
  TCP    [::]:135               [::]:0                 LISTENING
```

その他
* オブジェクト的なもの
	* DC：domain,DC=dfs,DC=local
	* CN=system CN=Dfs-Configuration