2010年7月23日金曜日

仮想ルータでゲストネットワークを構築する

image

社内のネットワークとは別に、ゲスト用にネットワーク回線を提供したいことがある。

このようなネットワークでは、インターネットとの通信は許しつつも、社内のPCや各種サーバへのアクセスは防ぎたい。

そのためには、ファイアーウォールの機能を備えたルータを置くことが必要だけれども、これを仮想化することを考えたい。(*1)

仮想化のシステムにはVMware ESXi、ソフトウェアルータとしてはvyattaを利用する。

(*1) 最近の無線ルータにはもともとゲストネットワークの機能が入っているものがあり、そうした機器では自前でルータを立てる必要はない。

物理的な接続

ゲスト用に物理的なHUBを用意する。無線LAN(Wi-Fi)も提供するならば、アクセスポイントをそこにつなげる。

前回の記事と同様に、ゲストネットワーク(Guest Network)にVLAN IDを一つ割り当てて、L2スイッチを通して仮想化ホストとの接続を行う。

image

仮想マシンを用意する

ESXiのネットワーク構成管理で、Guest Networkを作成して、VLAN IDを割り当てる。

メニューからvyattaをデプロイする。今回は単純にネットワークカードを2枚にした。eth0は社内ネットワークに接続し、eth1はGuest Networkに接続する。

vyatta

ルータの基本設定

ホスト名、タイムゾーン、NTPサーバなんかを設定。

vyatta@rt:~$ configure
[edit]
vyatta@rt# set system host-name rt.guest
[edit]
vyatta@rt# set system time-zone Asia/Tokyo
[edit]
vyatta@rt# set system ntp-server ntp.nict.jp
[edit]

ネームサーバは社内ネットワークのを使ってもいいんだが、社内サーバの名前解決が出来ても嬉しくないので、外部のもの(プロバイダのDNSなど)を利用。ここではGoogle Public DNSを設定。

vyatta@rt# set system name-server 8.8.8.8
[edit]
vyatta@rt# set system name-server 8.8.4.4
[edit]

ネットワーク設定

eth0のアドレスはDHCPで取得し、eth1には固定で192.168.1.1/24を割り当てる。

vyatta@rt# set interfaces ethernet eth0 address dhcp
[edit]
vyatta@rt# set interfaces ethernet eth1 address 192.168.1.1/24
[edit]

eth0に向かうパケットはIPマスカレードする。

vyatta@rt# set service nat rule 10 outbound-interface eth0
[edit]
vyatta@rt# set service nat rule 10 type masquerade
[edit]

ファイアーウォール設定

社内ネットワークへのアクセスは拒否するようファイアーウォールを設定する。これは次のルールによって行う。

  1. 192.168.0.0/16に向けたパケットは拒否する。
  2. 172.16.0.0/12に向けたパケットは拒否する。
  3. 10.0.0.0/8に向けたパケットは拒否する。
  4. それ以外のパケットは許可する。

まずはこれをルールFW-1として作成。

vyatta@rt# set firewall name FW-1 rule 1 destination address 192.168.0.0/16
[edit]
vyatta@rt# set firewall name FW-1 rule 1 action reject
[edit]
vyatta@rt# set firewall name FW-1 rule 2 destination address 172.16.0.0/12
[edit]
vyatta@rt# set firewall name FW-1 rule 2 action reject
[edit]
vyatta@rt# set firewall name FW-1 rule 3 destination address 10.0.0.0/8
[edit]
vyatta@rt# set firewall name FW-1 rule 3 action reject
[edit]
vyatta@rt# set firewall name FW-1 rule 4 action accept
[edit]

このルールをeth1から入ってくるパケットに対して適用する。

vyatta@rt# set interface ethernet eth1 firewall in name FW-1
[edit]

逆方向の通信、つまり社内ネットワークからゲストネットワークに向けた通信も防いだ方がいいのだろうけど、どうせFW-1によって双方向の通信は拒否されるので、上記設定で十分だろう。

サービス設定

必要に応じて、ゲストネットワークのためのDNSやDHCPサーバを動かす。

eth1からのDNS問い合わせは、最初に設定した外部のDNSサーバに転送する。

vyatta@rt# set service dns forwarding listen-on eth1
[edit]
vyatta@rt# set service dns forwarding system
[edit]

DHCPで配るアドレスは192.168.1.100~199とし、デフォルトルータやDNSのアドレスは自分自身にする。

vyatta@rt# set service dhcp-server shared-network-name ETH1_POOL \
  subnet 192.168.1.0/24 start 192.168.1.100 stop 192.168.1.199
[edit]
vyatta@rt# set service dhcp-server shared-network-name ETH1_POOL \
  subnet 192.168.1.0/24 default-router 192.168.1.1
[edit]
vyatta@rt# set service dhcp-server shared-network-name ETH1_POOL \
  subnet 192.168.1.0/24 dns-server 192.168.1.1
[edit]

設定の反映と保存

ここまでの設定をシステムに反映(commit)させる。問題なさそうなら保存(save)して完了。

vyatta@rt# commit
...
[edit]
vyatta@rt# save
Saving configuration to '/opt/vyatta/etc/config/config.boot'...
Done
[edit]
vyatta@rt# exit
exit

0 コメント:

コメントを投稿