ソフトウェアルーター・ファイアウォールの pfSenseを仮想マシンとして立ち上げます。
サーバーエンジニアの業務範囲からは若干外れてきますが、ルーターやファイアウォールの仕組みを理解しておくのは大事なことです。
ここでは Intel CPUの PCをルーター・ファイアウォールにすることができるソフトを扱ってみます。
pfSense
Ciscoに代表されるハードウェアのルーター・ファイアウォールのユーザーインターフェイスが最近はどうなっているのが知りませんけれども、pfSenseはコマンドよりも WEBブラウザでの設定を主にしているようです。
ネットワークエンジニアであれば Ciscoのネットワーク機器用の OSを使って、コマンドライン(黒い画面)での設定を経験したいところですが、サーバーエンジニアとしてそこまではしないがルーターが何をしているかは味わっておきたい、そんなニーズであれば丁度良い教材になるんではないかと思います。
でも pfSenseは本気の業務にも使えるブツという触れ込みなので、突き詰めればネットワークエンジニアの領域には入っていきますがね。
pfSenseは FreeBSDをカスタマイズした OSとして提供されています。
ですので、VMware Workstation Playerでは FreeBSD用の仮想マシンを作って OSインストールするという手順で構築していきます。
何はともあれ、まずはインストールイメージをダウンロードしましょう。
Community Editionというのが無償で使えますからこれを入手します。
Latest Stable Version (Community Edition)
アーキテクチャには [AMD64] を選択し、インストーラーは DVDイメージを選択します。
ミラーサイトはアメリカの他がドイツとシンガポールしか無かったので、アメリカのままにしています。
DOWNLOADを押します。
ダウンロードが完了すると [pfSense-CE-2.7.0-RELEASE-amd64.iso.gz] ファイルができました。
[.gz] って拡張子ということは Gzip圧縮されたファイルなので、私は Linuxの PCでダウンロードして Gzip圧縮を解き [.iso] という拡張子にしてから、VMware Workstation Playerが動いている Windows 10の PCに持ってきました。
Windowsであれば 7-zipが対応していますね。
これから VMware Workstation Playerで pfSense用の仮想マシンを作って行きますが、コイツはルーターですので少なくともネットワークインターフェイスが 2つ以上必要です。
これはネットワークが 2つ以上あるということですから、検証するにも何かしらのネットワーク設計をしなければなりません。
あまり良い例ではないですが、家庭内LANに繋げる形にしました。
私の環境では、ネットワークは論理的にはこういう絵になります。
実際にはネットワークも仮想化されていて、物理的に光ルーター以外は全て真ん中の Windows10で動いています。
これで [192.168.2.0/24] のネットワークにある [Windows Server 2022] からインターネットに接続したいなと。
pfSenseの中にある [em0]・[em1] がネットワークインターフェイスの名前です。
ルーターですからネットワークインターフェイスが最低でも 2個必要のはずです。
[em0] は VMware WorkStation Playerの [ブリッジ] で使われる [VMnet0] に、[em1] は VMware WorkStation Playerの仮想ネットワーク [VMnet2] に繋ぐようにします。
仮想マシンを作ります。
VMware WorkStation Playerを起動します。
[新規仮想マシンの作成]をクリックします。
[後で OS をインストール] を選択し、次へを押します。
[ゲスト OS] に [その他] を、
[バージョン] に [FreeBSD 12 (64 ビット)] を選択して、次へを押します。
[仮想マシン名] は VMware WorkStation Playerのメニュー上で表示される名前ですので、任意の名前を付けます。
[場所] はこの仮想マシンを構成するファイルを格納するフォルダを指定します。
他のものと被らないよう独立したフォルダにしてください。
次へを押します。
[ディスクの最大サイズ は適当に 20GBにしておきました。
こんなに使わないと思いますけど、実際には使った分しか割り当てられないので無駄はありません。
[仮想ディスクを単一ファイルとして格納] を選択し、次へを押します。
ハードウェアをカスタマイズを押します。
メモリ設定です。
こんなに使わないと思いますが、2GBにしておきました。
プロセッサ(CPUの数)は 1個にしました。
仮想DVDプレーヤーに入れるメディアの設定です。
[ISOイメージファイルを使用する]を選択し、ダウンロードして解凍した後の
[pfSense-CE-2.7.0-RELEASE-amd64.iso]ファイルを指定します。
ネットワークインターフェイスの 1つ目(これが [em0] になります)の設定です。
[ブリッジ] を選択します。
[USBコントローラー]・[サウンドカード]は必要ないので削除しました。
ディスプレイの設定です。
特にいじらず [3Dグラフィクスのアクセラれイーション] はいらないという程度です。
追加を押します。
[ネットワークアダプタ] を選択し、完了を押します。
[ネットワークアダプタ 2] が追加されています。
これが [em1] になります。
[カスタム] を選択し、[VMnet2] を選択して、閉じるを押します。
VMware Workstation Playerの中にハブが 20個あって(うち 3つはデフォルトで使われている)好きに使える、という絵を頭の中で想像します。
ネットワークアダプタとこれを紐付けるのは、LANケーブルで繋ぐ感じですね。
そのイメージでやってきてこれまで特にに問題がないので、概ね合っているのだと思います。
完了を押します。
仮想マシンの作成はこれで完了です。
[仮想マシンの再生] をクリックします。
仮想DVDプレーヤーに入れたメディアファイルから起動してきます。
著作権に関するドキュメントを丹念に読んで、同意できるなら、[Accept] でEnterキーを押します。
[Install] を選択し、[OK] でEnterキーを押します。
ファイルシステム種類の選択です。
[Auto (ZFS)]を選択し、[OK] でEnterキーを押します。
ZFSと ufsって Solarisと似てるなぁ…。
ここで ZFSの設定をできるようです。
pfSenseがインターネットに晒す時のファイアウォールになり得ることも鑑みると、ディスク内容を暗号化するのであろう [Encrypt Disks?] が気になりますが、ここではとりあえず何もせずに [Install] を選択し、[Select] でEnterキーを押します。
ディスクの冗長化構成(RAID)の設定ができるようです。
今回はディスクを 1台しか仮想マシンに持たせてないのでやりようがありませんね…。
2台付けて [Mirror] にしてみれば良かったです。
[raidz1][raidz2][raidz3]は ZFSならではの冗長構成なのかな?
[stripe] を選択し、[OK] でEnterキーを押します。
インストール先のディスクの選択ですけど、1台しかないので [da0] しか出ていません。
[da0] の行で (スペース)を押すと [*] が付きます。
[OK] でEnterキーを押します。
ディスクを消してよいかの最終確認です。
[YES] でEnterキーを押します。
しばし待ちます。
[Reboot] でEnterキーを押します。
仮想マシンが再起動します。
再起動してくるとこんな画面になります。
*** Welcome to pfSense 2.7.0-RELEASE (amd64) on pfSense ***
WAN (wan) -> em0 -> v4/DHCP4: 192.168.1.34/24
v6/DHCP6: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64
LAN (lan) -> em1 -> v4: 192.168.1.1/24
0) Logout (SSH only) 9) pfTop
1) Assign Interfaces 10) Filter Logs
2) Set interface(s) IP address 11) Restart webConfigurator
3) Rest webConfigurator password 12) PHP shell + pfSense tools
4) Rest to factory defaults 13) Update from console
5) Reboot system 14) Enable Secure Shell (sshd)
6) Halt system 15) Restore recent configuration
7) Ping host 16) Restart PHP-FPM
8) Shell
Enter an option:
インストールはこれで完了です。
次に設定をしますが、pfSense内のネットワークインターフェイスに使われる用語があるので先にそれを。
wan | 上位のルーターに繋がっているネットワークに接続しているインターフェイス。 デフォルトゲートウェイを設定できる。 |
lan | wanではないインターフェイス |
opt | ここでは扱っておらず、ネットワークインターフェイスが 3つ以上あると出てくる。 optの後ろに数字が付きます。 |
wan・lan・optは好きなネットワークインターフェイスに紐付けることができますが、wanと lanは 1つずつだけ存在して、残りは全部 optになるようです。
wanには設定項目が多くあるようですが、lanと optの違いはイマイチ分からず。
この環境では、ネットワークインタフェースの順番のおかげで、[em0]が wan、[em1]が lanになりました。
これが違っている場合は、上記の画面で [1]オプションを選ぶと、wanをどれにするか設定することができます。
2つのネットワークインターフェイスの IPアドレスを設定しましょう。
以下のようにします。
em0 | 192.168.1.109/24 Gateway 192.168.1.1 |
em1 | 192.168.2.1/24 |
上の画面の続きになります。
Enter an option: 2 ← [Set Interface(s) IP address]を選択
Available interfaces:
1 - WAN (em0 - dhcp, dhcp6)
2 - LAN (em1 - static)
Enter the number of the interface you wish to configure: 1 ← [em0]を選択
Configure IPv4 address WAN interface via DHCP? (y/n) n ← 固定IPなのでDHCPは使わない
Enter the new WAN IPv4 address. Prease for none:
> 192.168.1.109
Subnet masks are entered as bit counts (as in CIDR notation) in pfSense.
e.g. 255.255.255.0 = 24
255.255.0.0 = 16
255.0.0.0 = 8
Enter the new WAN IPv4 subnet bit count (1 to 32):
> 24
For a WAN, enter the new WAN IPv4 upstream gateway address.
For a LAN, press for none:
> 192.168.1.1
Should this gateway be set as the default gateway? (y/n) y ← このゲートウェイをデフォルトゲートウェイにする
Configure IPv6 address WAN interface via DHCP6? (y/n) y ← IPv6のアドレスはDHCPサーバーから貸与を受ける
Do you want to enable the DHCP server on WAN? (y/n) n ← WAN側にはDHCPサーバー機能を提供しない
Disabling IPv4 DHCPD... → えっ?今までWAN側にDHCPサーバー機能を提供してたの?そういうの困るな!って思った
Disabling IPv6 DHCPD...
Do you want to revert to HTTP as the webConfigurator protocol? (y/n) y ← WEB設定画面ではhttpsだけでなくhttpも受け付ける(セキュリティ上はよろしくない)
Please wait while the changes are saved to WAN...
Reloading filter...
Reloading routing configuration... route: route has not been found
DHCPD...
Restarting webConfigurator...
The IPv4 WAN address has been set to 192.168.1.109/24
The IPv6 WAN address has been set to dhcp6
Press <ENTER> to continue.
[em0] の設定ができました。
ENTERキーを押します。
次は [em1] です。
*** Welcome to pfSense 2.7.0-RELEASE (amd64) on pfSense ***
WAN (wan) -> em0 -> v4/DHCP4: 192.168.1.109/24
v6/DHCP6: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64
LAN (lan) -> em1 -> v4: 192.168.1.1/24
0) Logout (SSH only) 9) pfTop
1) Assign Interfaces 10) Filter Logs
2) Set interface(s) IP address 11) Restart webConfigurator
3) Rest webConfigurator password 12) PHP shell + pfSense tools
4) Rest to factory defaults 13) Update from console
5) Reboot system 14) Enable Secure Shell (sshd)
6) Halt system 15) Restore recent configuration
7) Ping host 16) Restart PHP-FPM
8) Shell
Enter an option: 2 ← [Set Interface(s) IP address]を選択
Available interfaces:
1 - WAN (em0 - static, dhcp6)
2 - LAN (em1 - static)
Enter the number of the interface you wish to configure: 2 ← [em1]を選択
Configure IPv4 address WAN interface via DHCP? (y/n) n ← 固定IPなのでDHCPは使わない
Enter the new LAN IPv4 address. Prease for none:
> 192.168.2.1
Subnet masks are entered as bit counts (as in CIDR notation) in pfSense.
e.g. 255.255.255.0 = 24
255.255.0.0 = 16
255.0.0.0 = 8
Enter the new WAN IPv4 subnet bit count (1 to 32):
> 24
For a WAN, enter the new WAN IPv4 upstream gateway address.
For a LAN, press for none:
> ← LANなので何も入れないでENTERキー
Configure IPv6 address LAN interface via DHCP6? (y/n) y ← IPv6のアドレスはDHCPサーバーから貸与を受ける
Do you want to enable the DHCP server on LAN? (y/n) y ← LAN側にはDHCPサーバー機能を提供する
Enter the start address of the IPv4 client address range: 192.168.2.2 ← DHCPサーバーが貸し出すIPアドレスの開始アドレス
Enter the end address of the IPv4 client address range: 192.168.2.90 ← DHCPサーバーが貸し出すIPアドレスの終了アドレス
Disabling IPv6 DHCPD...
Please wait while the changes are saved to LAN...
Reloading filter...
Reloading routing configuration... route: route has not been found
DHCPD...
The IPv4 LAN address has been set to 192.168.2.1/24
The IPv6 LAN address has been set to dhcp6
Press <ENTER> to continue.
[em1] も設定ができました。
ENTERキーを押します。
これで WEB設定画面(webConfigurator)が使えるはずなんですが、セキュリティのために赤矢印のように LAN側からしかアクセスできないようです。
Windows Server 2022に位置するノードは別に Windows Serverじゃなくても WEBブラウザが使える OSなら何でも良いのですが、手近なところに Windows Server 2022があったのでそれを使っています。
大事なのは、VMware Workstation Playerの仮想マシン設定で、ネットワークアダプタには [カスタム] で [VMnet2] を割り当ててやることです。
先程 pfSenseの LAN側インターフェイスの設定で DHCPサーバーを利用できるようにしておきましたので、固定IPにしなくても動くはずです。
というわけで、Windows Server 2022の Edgeで [http://192.168.2.1] にアクセスしてみました。
こちらが webConfiguratorのログイン画面になります。
[admin/pfsense] と入力して、SIGN INを押します。
Edgeのスクリーンショットって何故か縮小されてボヤけるんですよねぇ…。
お知らせが何回か出るので、Nextを何回か押します。
(Learn moreで深くお勉強するのも良いでしょう。)
[Hostname]・[Domain]・[Primary DNS Server][Secondary DNS Server]を設定し、Nextを押します。
私の環境では、光ルーターが DNSサーバー(フォワーダー)になっていて、1台しかないのでこうなります。
日本に合わせて [Time server hostname]・[Timezone]を設定し、Nextを押します。
WAN側のネットワークインターフェイスの設定画面ですが、黒い画面で設定し終わっていますので、何もせずにNextを押します。
これだけ多くの設定項目があることが分かります。
LAN側も同様です。
Nextを押します。
こちらはえらく設定項目が少ないです。
[admin]ユーザーのパスワードを変更しなければいけません。
2箇所に新パスワードを入力し、Nextを押します。
初期設定はこれで終了で、それを有効化するんでしょう。
Reloadを押します。
Finishを押します。
[User Survey]に協力するもの良いですね。
改めて著作権とライセンス関係のドキュメントです。
個々のユーザーの初回ログイン時に表示されるのかも。
同意できるなら、Acceptを押します。
Closeを押します。
ここからも [User Survey] に行けます。
コミュニティメンバーのおかげで、こうして利用ができると思うと有り難いですね。
ダッシュボードを見る感じ、メモリ 2GBもいらんかったようです。
この後日本語設定にしようとしたんですが、メニューに言語設定はあるものの、残念ながら日本語はありませんでした。
中国語と韓国語はあったので、日本人は翻訳に参加してないんだな…ってちょっとしんみり。
これにて初期設定は完了です。
初期設定だけで [192.168.2.0/24]ネットワークからインターネットに行けるはずなので、Windows Server 2022の Edgeでこのホームページにアクセスしてみました。
pfSenseを通って、インターネットにアクセスできました。\(^o^)/
とりあえずインストールもできて、正常動作しているように見えますが、この実験だけだとイマイチ面白くないですね。
ルーティングもさることながら、ファイアウォールの機能を設定してみたいです。
ルーターがどういう事をしている機械かってことを自身で腹落ちさせるには実際にこうしてやってみるのが良いと思います。
私はネットワークエンジニアではないので、突っ込んだところまでの知識がありませんが、仮にもこうして環境を作れたのは pfSenseが良くできているからなんでしょう。
Ciscoのルーターを買う程大きなネットワークではないけど、ルーターが欲しいという現場には有償版の pfSense+がありますので、検討してみても良いのでは?って思いましたね。
==========
寝床に入ってから「あれっ?」と気づきました。
Windows Server 2022からインターネットへのパケット(→)は別に良いけど、帰りのパケットが光ルーターに届いた時(←)、光ルーターはどうやって [192.168.2.0/24] にパケットを戻しとんじゃ?
光ルーターには pfSense [192.168.1.109] への静的ルート設定なんてしてないんだから、戻りパケットが届くはず無いのに…。
これは pfSenseってデフォルトで NATか NAPTが動いているのではないかと。
ネットワークって難しいよね、見えないから。
この後「pfSenseで DMZ 1」のシリーズに続きます。
果たしてまともなルーター/ファイアウォール設定できる日はくるのか?
これはハードウェアルーター製品のように見えますけど、pfSense+が入ったミニPCなんでしょうね。
PCに psSenseを入れて置いておくより場所を取らないし、小さなオフィスなんかでは使い勝手が良さそうです。