2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

NIC三枚刺し、VLANスイッチもどき(透過ルータ)の構築!

ネットワーク上のPCの台数が増えたため、ネットワークの規模を大きくするために、ネットワーク単位のセグメント分けを行うこととした。そのために、VLANもどきのセグメントルータを構築したので構築方法を記録する。ここで言う透過とは、各セグメント間はどこから通信しても、通過出来ると言うことを表している。「透過的」という意味。

仕様:
ルータとしての機能は、フィルタ等はいっさい設定しないで透過型ルータを構築する。このルータには、DHCPサーバも同時に構築する。さらに、192.168.0.0/24のセグメントに、SAMBAで構築するPDCを配置する。(以下、図1参照)また、IPアドレス直打ちによりセグメント越えのホストとのファイル共有も行う。

図1

VLANスイッチ兼DHCPサーバ名)jimny
OS)Debian/GNU Linux Lenny
カーネル)2.6.26-2-686
NIC)三枚刺し
DHCPサーバIPアドレス)192.168.0.8/24
ネットワーク詳細)
192.168.0.0/24は、固定IP領域(各種サーバを設置)
192.168.3.0/24は、DHCP(クライアント領域)ゲートウェイは、192.168.3.1
192.168.5.0/24は、DHCP(クライアント領域)ゲートウェイは、192.168.5.1

SAMBA PDCサーバIPアドレス)192.168.0.7
OS)Debian/GNU Linux Lenny
カーネル)2.6.26-2-686
サーバ名)spitfire
ドメイン名)inforsystem


1.Debian/GNU Linuxのインストール

本文書の目的ではない初歩的なことなので割愛する。


2.VLANスイッチ(透過ルータ)を作る

1)NICにIPアドレスを割り当てる

jimny:~# vi /etc/network/interfaces

auto lo
iface lo inet loopback

iface eth0 inet static
address 192.168.0.8
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
auto eth0

iface eth2 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
auto eth2

iface eth5 inet static
address 192.168.5.1
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255
auto eth5

jimny:~# /etc/init.d/networking restart

jimny:~# ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:00:f4:90:0f:af
inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::200:f4ff:fe90:faf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23125 errors:1 dropped:0 overruns:0 frame:0
TX packets:24563 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13964794 (13.3 MiB) TX bytes:3037069 (2.8 MiB)
Interrupt:11 Base address:0xd880

eth2 Link encap:Ethernet HWaddr 00:c0:4f:cf:a4:db
inet addr:192.168.3.1 Bcast:192.168.3.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:4fff:fecf:a4db/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7959 errors:0 dropped:0 overruns:0 frame:0
TX packets:10456 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:959987 (937.4 KiB) TX bytes:6042728 (5.7 MiB)
Interrupt:11 Base address:0x6000

eth5 Link encap:Ethernet HWaddr 00:40:05:23:31:7b
inet addr:192.168.5.1 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::240:5ff:fe23:317b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:28382 errors:1 dropped:0 overruns:0 frame:0
TX packets:26096 errors:0 dropped:0 overruns:0 carrier:0
collisions:1852 txqueuelen:1000
RX bytes:2810586 (2.6 MiB) TX bytes:10342575 (9.8 MiB)
Interrupt:10 Base address:0xdc00

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:485 errors:0 dropped:0 overruns:0 frame:0
TX packets:485 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:29574 (28.8 KiB) TX bytes:29574 (28.8 KiB)

2)IPtablesとルーティングテーブルの設定

IPtablesの設定は基本的に全てACCEPTとする。さらに、各セグメントの経路情報を設定する。

jimny:~# vi /etc/rc.local

iptables -F
iptables -X
iptables -Z

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

route add -net 192.168.0.0 netmask 255.255.255.0 gateway 192.168.0.1
route add -net 192.168.3.0 netmask 255.255.255.0 gateway 192.168.3.1
route add -net 192.168.5.0 netmask 255.255.255.0 gateway 192.168.5.1

iptables -L

exit 0

※ パケットを中継および透過させるには、必ず各セグメントのゲートウェイへ全てのセグメントの経路情報を記載しておく必要がある。忘れやすいので注意すること。

3)IPパケットを透過させる設定をする

IPパケットフォワーディング等の設定を行う。

jimny:~# vi /etc/sysctl.conf

net.ipv4.tcp_syncookies=1

net.ipv4.ip_forward=1

net.ipv4.icmp_echo_ignore_broadcasts = 1

net.ipv4.icmp_ignore_bogus_error_responses = 1


3.DHCPサーバを作る

1)DHCPをインストールする

jimny:~# apt-get install dhcp3-server

2)DHCPを設定する

jimny:~# vi /etc/dhcp3/dhcpd.conf

ddns-update-style none;
option domain-name “xxxxxxxxx.co.jp”;
option domain-name-servers 192.168.0.4;

log-facility local7;

subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.51 192.168.3.254;
option routers 192.168.3.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.3.255;
default-lease-time 600;
max-lease-time 7200;
}

subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.51 192.168.5.254;
option routers 192.168.5.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.5.255;
default-lease-time 600;
max-lease-time 7200;
}

3)DHCPを起動or再起動する

jimny:~# /etc/init.d/dhcp3-server restart


4.Samba PDCサーバ+Winsサーバを構築して、ファイル共有する

1)Sambaサーバのインストール
spitfire:~# apt-get install samba samba-common

2)ログオンスクリプト用netlogonディレクトリの作成
spitfire:~# mkdir /home/netlogon

3)Sambaサーバの設定(Winsサーバ)
spitfire:~# vi /etc/samba/smb.conf
#======================= Global Settings =======================
[global]
;点線で囲ってある部分は、UnixのロケールとWindowsのロケールとの整合性をとる設定。
;----------------------------------
;Unix側の文字コード(samba3.xxからの設定)。
unix charset = eucJP-ms

;DOSつまりWindows側の文字コード(samba3.xxからの設定)。ちなみに、cp932はMS-DOS日本語SJIS
dos charset = cp932

;SWATで表示するUnix側のディスプレイ文字コード(samba3.xxからの設定)。
display charset = eucJP-ms
;----------------------------------
;netbios名を指定する。ここに指定すれば”server stringsの%hに書き込まれる。
netbios name = spitfire

;ドメインマスターブラウザを表している。複数のセグメントにまたがってる場合には中央のメインドメインマスターブラウザとして働く。
domain master = Yes

;ローカルマスターブラウザになるか否かの設定。これが、Yesだとローカルマスターブラウザになろうとする。
local master = Yes

;「優先マスターブラウザ」として働く。domain master = Yesにした場合は、これもYesにするべき。
preferred master = Yes

;ブラウザ選定で自らを通知するときのオペレーティングシステム優先レベル。65が最高レベル。デフォルトは、0。
os level = 65

;ワークグループもしくはドメイン名を指定する。
workgroup = inforsystem

;共有に対する管理アクセス権を与えるユーザリスト。
admin users = administrator

;サーバの命名に対する設定。
server string = %h inforsystem server

;winsをサポートするか否かの設定。
wins support = Yes

;ブラウズリストにサービスを表示するか否かの設定。これを、Noに設定してもネットワークブラウザに表示されないだけで、サービスへのアクセスは可能である。
browseable = Yes

;ユーザレベルのセキュリティでアクセス許可を行っている。
security = user

;暗号化パスワードを使用するか否かを設定する。セキュリティレベルが上がる。
encrypt passwords = Yes

;Windows 2000 以降では、従来の139/tcpを用いるNetBIOS over TCP/IP(NBT)に代わり、445/tcp を用いる Direct Hosting of SMB という新しいプロトコルがデフォルトになっている。これを無効にする場合には、これを設定する。
smb ports = 139

;Win95時代のドメインログオンが有効になる。ただし、WinNTサーバがネットワークにある場合は、使わない方がよいかも知れない。
domain logons = Yes

;これが、Yesになっていると、winsサーバでnetbios名が解決できない場合にDNSを参照して解決しようとする。
dns proxy = No

;ログファイルパスのしてい。
log file = /var/log/samba/log.%m

;ログファイルMAXサイズ定義。
max log size = 1000

;シスログレベル、0はエラー。
syslog = 0

;サーバがクラッシュしたときに実行するコマンドを設定する。このパラメータはデバッグ用である。
panic action = /usr/share/samba/panic-action %d

;ログオンスクリプトの提供。スクリプト名の設定。
logon script = script.bat

;ネットワークセグメントにアクセス制御を設定する。
hosts allow = 192.168.0. 192.168.3. 192.168.5. 127.

;unix password syncパラメータは、sambaパスワードが変更されたとき、sambaがUnixパスワードをSMBパスワードと同期させるか否かの設定。このunix password syncパラメータを真に設定することで、Sambaパスワードが変更されるタイミングで、UNIXのパスワード変更コマンドを起動することができる。ただし、あまり使うことを推奨はしない。
unix password sync = No → Yes

;このコマンドは passwd programパラメータで指定する。この指定を実現するには、以下点線で囲ってある部分のように設定する。
;---------------------------------
add user script = /usr/sbin/useradd %u
add group script = /usr/sbin/groupadd %g
add machine script = /usr/sbin/useradd -g machine -c Machine -d /dev/null -s /bin/false %m$
delete user script = /usr/sbin/userdel %u
delete user from group script = /usr/sbin/deluser %u %g
delete group script = /usr/sbin/groupdel %g
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd chat debug = Yes
;--------------------------------

;PAMを使ったパスワード変更を許可しない。
pam password change = No

;クライアントとの通信の時に使用されるソケットオプションを指定する。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

#======================= Share Definitions =======================

[netlogon]
comment = Network Logon Service
path = /home/netlogon
guest ok = Yes
writable = No
share modes = No
browseable = no

[homes]
comment = %U’s Home Directory
browseable = no
writable = yes
create mask = 0644
directory mask = 0755

[public]
comment = public directories
path = /usr/common
public = yes
browseable = yes
guest ok = no
writable = yes
directory mask = 0774
create mask = 0774
read list = readusers
inherit permissions = yes
valid users = @adm @users


4)logonスクリプトを作る
上記のsmb.confの設定では、/home/netlogonディレクトリへscript.batをファイルを作らなくてはならない。logonスクリプトは、Windows環境で使われるため、Unix上でスクリプトファイルを作成する場合は、行末コードをCR+LFにしなければならないためnkf コマンドで変換しなくてはならない。したがって、以下の要領で作成して、変換する。

■ スクリプトファイルを作る
spitfire:~# vi /home/netlogon/script.bat
@echo Mapping Network Drives to Samba Server Infosys…
net use m: \\infosystem\homes /persistent:no
net use p: \\infosystem\public /persistent:no
:end

このスクリプトは、ネットワークドライブが割り当てられるlogonスクリプトだ。
ここで、接続先の共有と認証情報が一致しているならユーザー名とパスワードは省略可能。”/persistent:no” オプションは自動接続を無効にするので、起動時にダイアログが出ることはない。

■ nkfでコードをDOS用に変換する
spitfire:~# nkf -Lw /home/netlogon/script.bat > /home/netlogon/script.bat.dos
spitfire:~# mv /home/netlogon/script.bat.dos /home/netlogon/script.bat

5)手動でアカウント登録する
まずは、admグループadministratorユーザを作る。その他、usersグループの一般アカウントも同じ要領で作る。

■ Unixグループ登録(adminグループを作る)。
spitfire:~# groupadd adm

■ Unixユーザ登録(administratorアカウントを作る)。
spitfire:~# useradd -g adm -s /bin/false administrator

-s /bin/false でUnixへのログインを許可しない設定にする。

■ Unixパスワード登録(省略可
spitfire:~# passwd administrator
Changing password for user administrator.
New UNIX password:xxxxxxxxx
Retype new UNIX password:xxxxxxxxx
passwd: all authentication tokens updated successfully.

■ PDCサーバ側アカウント登録
spitfire:~# pdbedit -a administrator
new password:xxxxxxxxx
retype new password:xxxxxxxxx
Unix username: administrator
以下省略

■ ユーザ情報の確認
spitfire:~# pdbedit -v administrator

6)UnixグループとWindowsグループの対応付け(グループマッピング)
net groupmapコマンドを使って、Unix側のグループ名とWindows側のグループ名を対応づける。つまり、グループマッピングとはUnixグループをWindowsグループのように使うための機能である。

■ UnixのusersグループをWindowsのDmain Usersグループと同等とする。
spitfire:~# net groupmap add NTgroup=”Domain Users” UNIXgroup=users

■ UnixのusersグループをWindowsのUsersグループと同等とする。
spitfire:~# net groupmap add NTgroup=”Users” UNIXgroup=users

■ UnixのusersグループをWindowsのDmain Adminsグループと同等とする。
spitfire:~# net groupmap add NTgroup=”Domain Admins” UNIXgroup=adm

■ UnixのadmグループをWindowsのAdministratorsグループと同等とする。
spitfire:~# net groupmap add NTgroup=”Administrators” UNIXgroup=adm

■ リストビューする。
spitfire:~# net groupmap list

7)sambaサーバ起動or再起動

spitfire:~# /etc/init.d/samba restart

8)クライアントの設定
■ ローカルエリア接続のプロパティ→インターネットプロトコル(TCP/IP)→プロパティ→詳細設定→WINSの設定にWINSサーバを追加する。

図2

■ マイコンピュータの右クリック→プロパティ→コンピュータ名→変更でドメイン名を記載。

図3

■ administratorを入力してパスワードを入力。

図4

■ 少し待つが、めでたくドメインへ参加。

図5

■ ネットワークコンピュータを開いてブラウズしてみる。以下のように見えるには時間が掛かるので諦めないように。

図6

9)セグメント別のホストの共有化
特定のセグメント内のwinsサーバでは、各セグメント毎のnetbios名を解決することは出来ない(名前解決自体が同一セグメント内に限定される)。したがって、セグメントを越えたホストの共有化は、下図のようにIPアドレス直打ちで解決することとなる。

■ 共有化した目的のホストのIPアドレスを\\の後に入れて実行する。

図7

■ 以下の図8~図10のように、相手の共有化されたフォルダの中身がブラウズできアクセスできる。

図8
図9
図10

■ これは、LinuxのGUIから同じことを行ったところ。

図11

5.その他

1)gw3への経路情報の設定
192.168.0.0/24の大元のゲートウェイサーバ(192.168.0.1)に経路情報を与える透過的ルータを構築する場合は、各セグメントのゲートウェイに経路情報を書かないとパケットが通過しないので注意すること。以下は、iptablesの設定ファイルに追記しているところ。別に、/etc/rc.localでもよい。

# /usr/sbin/set_fw.sh

省略

route add -net 192.168.0.0 netmask 255.255.255.0 gateway 192.168.0.1
route add -net 192.168.3.0 netmask 255.255.255.0 gateway 192.168.0.8
route add -net 192.168.5.0 netmask 255.255.255.0 gateway 192.168.0.8

2)VLANスイッチの経路情報の確認
jimny:~# netstat -a -t -u -n -p
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1988/sshd
tcp 0 0 192.168.0.8:22 192.168.5.52:1106 ESTABLISHED 10726/sshd: mity [p
tcp6 0 0 :::22 :::* LISTEN 1988/sshd
udp 0 0 0.0.0.0:67 0.0.0.0:* 30978/dhcpd3

jimny:~# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.5.0 192.168.5.1 255.255.255.0 UG 0 0 0 eth5
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth5
192.168.3.0 192.168.3.1 255.255.255.0 UG 0 0 0 eth2
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.0.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0

以上

コメント