ホーム » 技術 » 自宅LANを整備する(CentOS8のNAT設定)

自宅LANを整備する(CentOS8のNAT設定)

自宅のLAN環境は、自慢するほど特別なことはしていない。自分はラックを置いたり、専用線を引いたり、full routeを貰ってBGP運用をしたりはしていないので、そういうネタを書くことはない。本稿はごく普通の自宅LAN環境を再構築するにあたってメモを残し、3年ぐらい後の自分の備忘録にするためのものだ。

要件のようなもの

自宅のアクセス回線は玄関に設置されたマルチメディアボックスなる箱の中に終端されている。

若干いじってあるが、だいたいこんな感じ

これを論理的に書くと、だいたいこんな構成になっている。

ふつーに契約した場合の構成図

通常の回線契約では、事業者SWがゲートウェイとなってDHCPでローカルIPアドレスをくれる。部屋にはコンセントにRJ-45端子があって、どこからでも有線で接続できる。NATは事業者がやってくれる。まあ、通常の家庭用アクセス回線ならこれで特に問題は生じないと思われる。

オプション契約を結ぶと、固定IPv4アドレスを1つ貰える。この場合、/30のサブネットが割り当てられ、こんな構成を取ることになる。

固定IPアドレス契約の場合

このとき、ルータのMACアドレスを事業者に通知して登録しなければならない。事業者側SWでは制限をかけていて、MACアドレスを頼りに特定機材に対してフォワーディングを行うようになっている。

さてこのとき、各部屋のネットワークをどうしたらいいだろうか。ポート1つでサブネットを共有してもよいが、なんか気持ち悪い。そこでげた箱の中のスイッチをよく見てみると、写真にあるとおりGbE対応の割とよさそうなものが入っているので、これを流用してこんな構成に切り替えたらどうかと考えてみた。

現在の機材構成図

こうすれば、各部屋のコンセントも使えるし、routerでNAT/DHCPすればすべて解決だ。

というわけで「げた箱」の中にルータマシンを置いて運用してきた。これまではACERのミニPCを使ってきたのだが、かなり古くなってきたので新しいのが欲しい。できたらファンレスの小さなマシンで、ポートが2つ、なくてもUSB/GbEのポートでいいからつけられればいい。そういうのはだいたい2万円ぐらいで買える。選んだのはこちら。

https://www.amazon.co.jp/gp/product/B07RR2GT5H

深く考えずに注文したのだが、今使っているACERもAtom D525だし、これがAtom X7-E3950になるなら問題は何もないだろうと楽観していた。これはだいたい8月中旬の話だった。

だがしかし

届いたマシンを(プレインストールされていたWindowsは無視して)さっそくCentOS7のブートイメージで起動してみたのだが、なんだか様子がおかしい。最初の時点で「このCPUはサポートしてないよ」と出る。無視すればいいかなと思っていたのだが、インストーラが起動しない。え、サポートしてないよっていうのはマジで言ってんの? という話である。仕方がないので、ここからCPUのサポート状況を調べ始めた。そう、自分は「マニュアルは後から読み始めるタイプ」だ。

まずCPUの型番をきちんと調べ(買うときには調べていなかった)、Linuxの対応状況を確かめるべくググってみた。するとこんな記事がヒットした。

Linux Kernel 4.11 がリリースへ、Intel Gemini Lakeのサポートなど
3月の初頭にRCがリリースされてから2ヶ月ほどが経ちましたが、ついにLinux Kernel 4.11の正式版がリリースされました。
(中略)
まとめ
Intel Gemini Lakeは14nmプロセスルールで製造されたモバイル向けのCPUで、Atom x7-E3950やPentium J4205などのApollo Lake世代の次期モデルにあたります。

https://syobon.jp/blog/2017/05/01/linux-kernel-4-11-released-support-gemini-lake/

ずばり、買ったCPUは少なくともかなり後のkernelでないと対応していないようだ。この時点でCentOS7は3.10で、まったく話にならない。まずい買い物をしてしまったようだ。だが、そういえばCentOS8のリリースが夏に予定されているということを思い出した。それまで待てば、このマシンを無駄にせずに済む。一応、Fedora30で動くことを確認しつつ、CentOS8のリリースをジリジリと待ち続けた。

ようやくリリースされたCentOS8

で、9月25日に(時差のせいか、はたまたちょびっとリリースが遅れたか、とにかく日本時間の9月25日の朝に)CentOS8を手に入れた。さっそくイメージを使ってインストーラをブートしてみると、CentOS7でコケていたところは問題なく進み、インストールは無事完了した。

CentOS7と8の違いについては、すでに記事にした。

で、本当はさっさとインストールを終わらせて、備忘録でこの記事は終わるはずだったのだが、いろんなトラブルやオモシロ現象に気づいてしまい、ちょっと脱線が多くなった。そこで別途記事を書くことにした。

ルータとしてのセットアップ

本稿ではルータとしてのセットアップにフォーカスしたい。CentOS8については書きたいことがいっぱいあるが、全部盛り込んでいると脱線に次ぐ脱線で話が混乱してしまうからだ(まあ、自分が勝手に混乱しているだけという話だが)。

フォワーディングをONにする

まずはsysctlでフォワーディングをonにする。/etc/sysctl.confに次のような行を追記する。

net.ipv4.ip_forward=1

そうしておいて、リブートもしくは

sysctl -p

で設定をロードする。

NICを適切に設定する

LAN側のNICをinternalに、WAN側のNICをexternalにする。具体的には/etc/sysconfig/network-script/ifcfg-*の該当ファイルに

ZONE=external

あるいは

ZONE=internal

と書く。そしてリブートもしくは

systemctl restart NetworkManager

で設定をロードする。firewall-cmdで確認してみて、

[root@xorn ~]# firewall-cmd --zone=external --list-all
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s21f0u2
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

external側は、指定したポートがinterfaces: に入っていて、masquerade: yes になっていればOKだ。これでローカルをNATしてくれるようになる。

以上の設定は、iptablesが廃止されたとか、nftablesに移行したという話と無関係に、簡単に実行できるという点がポイントだ。

なんとなく設定できた

とりあえず土日を使ってリプレースした。設置後はこんな感じ。

設置後

ちなみに新旧マシンのUnixBench Indexを比較すると、旧マシンが single/parallel で 250.9/514.2 に対して新マシンが 574.6/1652.5とかなりアップしている。

で、切り替えて2日ほど過ぎた時点での状況なのだが、なんかベースロードが増えているのが気になる。特にI/O waitが恒常的に5%ほど出ていて、理由がよく分からない。

マシンスペックもOSも違うので一概に比較はできないが、これほど違うと何が何やら、という感じである。誰が何をしているのかは、今後ゆっくり調べていこうと思う。

その他メモ

以下は完全に備忘録的メモ。

  • fail2ban(のためのEPEL)
  • zabbix-proxy
  • autofs

気が向いたらそれぞれ別に記事にしたい。