2018/01/31

OPNsenseで自作ルータにする


LANポートが4つあるPCを手に入れたから、それにソフトウェアルータを入れて自分の気に入るように構成してやろうと思う。

ソフトウェアルータ、いろいろあるが何がいいのか。

VyOS(https://vyos.io/)
SEIL/x86(http://www.seil.jp/product/seil-x86.html)
OPNsense(https://opnsense.org/)
pfSense(https://www.pfsense.org/)

VyOSでは、IPv6だけブリッジで接続してIPv4はNATにするとかいうことが難しそうだった。それに、ブリッジにしたときのファイアウォールの設定に難がある。宛先や送信元のポートで絞ることができず、IPアドレスでフィルタを設定しなければならない。しかし当然だが、IPアドレスは何が割り当てられるのかも、いつ変わるのかもわからないので、設定しようがない。

SEIL/x86でもよさそうだったのだが、俺みたいな情弱には使い方がいまいちわからなかった。

ということで、OPNsenseでやってみることにした。

1.インストール

ダウンロードのページに行くと、nano、dvd、vga、serialの4種類の中から選択を求められる。

どうも、vgaという奴がUSBメモリからブートする奴らしいので、それを選んでやってみた。だが、インストール後にUSBメモリを引っこ抜いて再起動すると、Windows 7が起動してくる。これはどうやら、常時USBメモリを指しておかなければいけないらしい。俺が求めているのはこれではない。

dvdというのも、同じようなものらしい。ということで、nanoというものをダウンロードする。でもってそれを、内蔵のSSDに書き込んでやる。

書き込むと簡単に言うが、これが俺みたいな情弱にはかなりの難物だった。

まず、USBメモリに書き込むのであれば、USBWriterというソフトが便利である。だが、これはUSBメモリ以外には書き込めないよう制限がかかっているらしく、対象としてSSDが選択できなかった。

なので、DD for Windowsを使った。

まず、内蔵されているmSATAのSSDを取り出して、それをmSATA-SATA変換アダプタとSATA-USB変換アダプタでUSB接続に変えてやって、USBでPCに接続する。(USBにすればUSBWriterが使えるかと思ったのだが、だめだった)。

その状態で、ダウンロードしたOPNsenseのディスクイメージをDD for WindowsでSSDに書き込む。

それを、元通りに本体に戻して電源を入れてやると、無事にOPNsenseが起動した。

後はコマンドラインからIPアドレスを設定して、その設定したアドレスにWebブラウザで接続してやれば、他の設定をいじることができるようになる。なお、デフォルトのユーザ名はrootで、パスワードはopnsenseである。


2.設定内容

設定内容を手順を追って書くのが良いとは思うのだが、実のところ、かなり試行錯誤した結果であるため、何をどういう順番でこうしたのか、もはや全く覚えていない。

だから結果だけ書く。

2.1 インタフェースの割り当て



とりあえず、ポートが4つあるのだから、4ポート分インタフェースの割り当てを行ってやる。そのうち、ポート1をWAN用に使うことにして、残りのポート2~4とWiFiはLAN用の使う。

ポート2と4の設定は下記のようになっている。



ポート3には管理用のIPアドレスを割り当てるため、設定がちょっと違う。



WiFiのポートは、基本的にポート2と4と同じだが、WiFiのアクセスポイントにする設定項目がある。



WAN用に使うポート1は、ポート2や4と同じだ。



ここで、PPPoEの設定を追加してやる。ポイントツーポイントのデバイスという項目を選択してやる。



上はすでに登録した後の絵だ。最初は何もない。そこで追加ボタンを押して、PPPoEの設定を行う。



確か、PPPoEのポートを追加したら、それをインタフェースとして追加してやらなければいけなかったはず。上の絵を見ると、一覧に「v4WAN_PORT1」というのがあるが、それである。

中の設定はこんな感じ。



それと、ブリッジの設定をしてやらなければならない。その他のタイプでブリッジを選択して、追加ボタンを押下する。



中はほとんど設定すべきことは無い。ブリッジに含めるポートを選ぶだけだ。



ここではIPv6用とIPv4用に2つブリッジを設定している。V6WAN_PORT1というのが含まれているのがIPv6用である。IPv6の場合はWAN用のポート1を含めてそれ以外全部(無論PPPoEのものは除いて)をブリッジでつないでやるのだ。それに対してIPv4の場合は、IPv4のパケットがWANポートに出られては困るので、WAN用のポート1を除いてブリッジを設定する。

ブリッジを追加したら、これもインタフェースに追加する。インタフェースの一覧に見えているv6BRIDGEというものとv4BRIDGEというものがそれである。

ブリッジについてインタフェースとして設定すべきことはほとんどない。


次はファイアウォールの設定である。

LAN用に使うポート2・4・WiFiは同じで、IPv4とIPv6を全開にしてやる。デフォルトですべてドロップされるため、これをやらないと何も通信ができない。



ここで、送信元が*になっていることに注意されたい。ルールを追加するとき、送信元のポートをインタフェースの名称で指定することができるのだが、これは結局、そのインタフェースに設定されているIPアドレスによりフィルタされるものであるようだ。だから、ポート2やポート4のようにIPアドレスを設定していないポートを送信元として条件に加えると、すべてのパケットがフィルタされることになってしまう。

ポート3については、デフォルトで80番に対する接続を受け入れる設定が入っているが、それ以外は似たようなものである。



PPPoEのポート(つまり、IPv4用のWANポート)は、デフォルトで設定されていたものをそのまま残している。



ポート1、すなわちIPv6用のWANポートについては、送信元が547番で送信先が546番のUDPだけを許可してやっている。これは、DHCPv6のサーバからクライアントへの通信である。これがないと、IPv6のDNSサーバのアドレスが取得できない。(なお、フレッツ光のIPoEだと、IPアドレスとサブネットマスク、デフォルトゲートウェイはルータ広告で設定され、DNSサーバのアドレスだけはDHCPv6で決定されるらしい)


あと、ブリッジにもフィルタを設定する。IPv4用に作ったブリッジとか言ったところで、それは俺の思い込みに過ぎず、何もしなければすべてのパケットが転送されてしまうので、v4用のブリッジにはv4しか通さない設定を行う。



IPv6についても同様。


IPv4についてはブリッジでつないだ中のネットワークから、PPPoEによる外のネットワークに対してNATを行ってやらなければならないはずだが、その設定は勝手に定義が登録されるようだ。ここは実は何も触っていない。



ゲートウェイの設定を追加してやらなければならない。IPv4のゲートウェイとIPv6のゲートウェイのそれぞれが必要になる。



設定はデフォルト的な感じになっている。



IPv6も同様。


あと、デフォルトではブリッジに設定したフィルタルールは適用されないようになっている。なので、それを有効にしてやらなければならない。システムの調整パラメータというところを選択して、その中にある「Set to 1 to enable filtering on the bridge interface」を1に設定してやる。



ここまでやってやれば、とりあえず、IPv4とIPv6で通信できるようになるはずである。



あと、ここまで書いておいてなんだが、上記を記載通りの順番で設定しておくと、ブリッジを2つ有効にした時点でブロードキャストストームが発生してろくでもないことになるはずである。当然だ。

最終的な構成としてはフィルタによってIPv4とIPv6が分離されてループはしないはずではあるが、それでも何となく不安な気がしてきた。

結局、ブリッジは1つにしてブリッジに対するフィルタはなしにしてしまった。

2018/01/29

今更だけどIPv6

唐突だが、回線はフレッツ光で、プロバイダはasahiネットを契約している。IPoEでIPv6が使えるらしいから、やってみた。

まず最初にやらなければならないのは、IPv6を使えるようにサービスの申し込みを行うことだ。これはプロバイダに申し込みの手続きを行う。

asahiネットの場合はここから手続きを行えばよい。

https://asahi-net.jp/service/ftth/ipv6/

の、はずなのだが、すでにこの手続きは終わっていた。言われてみれば、かなり昔にその手続きをやったような、やらなかったような、そんな気がしなくもない。まぁいいか。

一応確認してみる。

ルータを外してケーブルをPCに直結して、イーサネットのプロパティからIPv6を有効にしてやる。



IPアドレスやDNSサーバのアドレスの取得は全部自動にしてやる。



ネットワーク接続の詳細で見る限り、v6のアドレスやDNSサーバのアドレスが取得できていることがわかる。



だが、この状態では何のセキュリティもなくWindowsのPCが直接インターネットにつながっていることになる。某早稲田大学の学生某SMAPの草薙氏と同様、裸族として暮らすのと同じだ。自称とはいえ紳士を自認する俺には耐えられそうにない。

だから今までは、ブロードバンドルータを入れて身を守るようにしていた。だが、IPv6になるとそれができなくなる。なぜか。

今回いろいろ調べてようやく理解したことをメモ代わりに書いておく。

まず、どうも、NTTはひかり電話の契約がない貧乏人に対しては、IPv6のアドレスとして/64のものを配るらしい。

これが何を意味するのか。

IPv6のアドレス体系では、ネットワークアドレスとして使えるのは上位64ビットまでで、下位64ビットはホスト部として使われる。

一般に、ルータは上位のルータからネットワークアドレスとビット数を受信する。例えば1:2:3::/48というアドレスが割り当てられたものとする。

そうするとこのルータは、上位48ビットが1:2:3になるような形でサブネットを切って、さらに下位のルータに対してネットワークアドレスを通知する。例えばサブネットを3つ作るのであれば、下記のようなアドレスを通知することになるだろう。

(1) 1:2:3:1000::/56
(2) 1:2:3:2000::/56
(3) 1:2:3:3000::/56

ここで(1)のアドレスを受けたルータは、ホストなどに対して以下のようなネットワークアドレスを配布する。

(1-1) 1:2:3:1001::/64

ネットワークアドレスの最大長は64ビットである以上、もしルータが上記(1-1)のようなアドレスを受け取ってしまった場合、そのルータはもはやこれ以上サブネットを設けることができない。すなわち、そのルータはルータとして振る舞うことが許されなくなる。



だから市販のブロードバンドルータは、「ルータ」などと名乗っておきながらIPv6についてはルータとしては機能せず、IPv6パススルーなどと言ってIPv6パケットについては何もせずただ素通りさせるだけという機能しか搭載していない。つまり、IPv6についてはセキュリティは完全にザルだということだ。

ということで、方策を練らなければならない。

結局、やりたいこととしては、IPv6で接続できて、なおかつ外部からはアクセスできないようにしたいのである。ならば対応策としては2つしかない。

(A)IPv6についてはブリッジ接続にする(要は、IPv6パススルーにする)。そのうえで、ファイアウォールにより防備を固める。
(B)NAT66にする。

IPv6では末端のクライアントまでグローバルアドレスを割り振ることができるから、いやらしいNATを使わなくて済む、というのがIPv4に対する利点である。その意味でいえば正統な解は上記(A)である。だが、俺みたいな情弱には目的を達するのであればNAT66でもいいかもしれないと思ってみたりもする。

だが、いろいろ試した結果、NAT66ではうまく構成できそうにないことから、真っ当な方法をとることにした。

結果、いろいろ考慮して以下のような構成にすることにした。



実のところ、ファイアウォールな成分がなければ、今まで使っていたI-O DATA ETG2-DRで、IPv6パススルーを有効にした場合を何ら変わるところはなかったりもする。

設定内容については後で書く。

2018/01/28

ブロードバンドルータを入れ替えた

自宅で使っているブロードバンドルータを入れ替えた。ついでにIPv6も使えるようにしたから、やったことを書いておく。

1.前に使っていたやつ

I-O DATAのETG2-DR

http://www.iodata.jp/product/lan/router/etg2-dr/index.htm

かなり昔に買ったもののような気がするが、製造終了が2017年4月19日と書いてある。ずいぶん製品寿命が長いのだな。


2.新しい奴

LANポートが4つついた小型のPC。メーカ型番はMI19W-S1となっている。メーカ名?はKettopとあるが、検索しても出てこない。



出品者も香港の会社(?)で、なんだかいろいろ胡散臭い。でも値段につられてこれにしてみた。

カタログスペックはこうなっている。

・CPU : Celeron J1900
・メモリ : 2GB
・SSD : 8GB
・NIC : 1Gbps × 4ポート
・USB : 2.0が3ポート、3.0が1ポート
・ディスプレイ : アナログRGB出力が1つのみ

注文してしばらくしたら、ちゃんと到着した。



指が映り込んでいやがる・・・

梱包を開けたらこんな感じ。




ところで、上のカタログスペックにもある通り、こいつにはディスプレイの出力がアナログRGBしかない。だが、俺の自宅にはすでにしてVGA入力を受け付けるようなディスプレイはない。もとよりD-Sub15ピンのケーブルなんて残ってない。この間全部捨てた。

ルータとして使う以上、普段はディスプレイなんて接続しないのだが、セットアップ作業中にはどうしても必要になる。

どうするか。

とりあえず、VGAのケーブルとVGA-HDMI変換の機械だけは買うことにした。

70cmで523円



VGA-HDMIの変換アダプタ。493円なり。



近くのソフマップに行ったら、こういったVGAのアップスキャンコンバーターは5000円以上の値段で売っていた。ありえない。

だが、この変換アダプタが自宅に届くよりも先に、本体の方が先に来てしまった。

どうするか。待つしかないのか? と思ったが、あった。VGA入力ができるやつ。PioneerのKRP-500A。焼けつきが怖いからPCの画面なんて映したくはないのだが、まぁ致し方ない。

で、とりあえず電源を入れてみたら、Windows 7がインストールされていた。



見たところ、カタログスペックに間違いはないようだ。

ディスク容量は8GB。英語版Windows 7だが、ディスク使用量が4GBを下回っている。結構衝撃的。


メモリ容量は2G、CPUはCeleronのJ1900



1Gbpsの有線LANが4つある。チップはIntelのI211らしい。あと、内蔵のWifiがある。



今時忘れ去られて久しいが、Win7なのでエクスペリエンスインデックスの値が表示できる。



性能についてはここで細かく調べるより、J1900で検索した方が詳しいだろうから、これ以上は追及しない。ただ、放熱がうまくいくのかどうかについては気になるところなので、ちょっと試してみた。

Prime95のCustomでMin FFT Sizeを2048、Max FFT sizeを4096にしてしばらく回してみた。



室温が20度で2時間半ぐらいやった結果だが、最高が50度程度。いいのだか悪いのだかよくわからんが、とりあえず過熱し続ける風でもないし、まぁいいか。

あと、裏蓋を開けたときの様子を張っておく。



わかりにくいが、奥側にmSATAのSSDがあって、手前右側にWifiがついている。左側はメモリだ。委細は調べていないが、ソケットの記載を信じるのならLでない方のDDR3だ。

あと、サイズ的にはWifiのついている位置にはフルサイズのmSATAボードがつけられる大きさがあった。だが、フルサイズのmSATAに対応するねじ穴がなく、つけることができないようだ。半田がついている穴があるから、ここにナットを半田で溶接すれば、もしかすれば固定できるかもしれない。やろうとは思わないが。

ソフトウェア的な設定については日を改めて書く。

あと最後に、こいつ、電源ボタンの横に緑色の電源ランプがあるのだが、これが異常にまぶしい。直視すると目に残像が残るレベルだ。



上にあるHUBのLEDが室内の照明に押し負けているのに対して、これの電源ランプは強烈に自己主張している。なぜにこんな高出力のLEDがついているのか?