Tech Note Plus

PC から Azure まで幅広い伝道を目指してます

OpenWrt の基本設定をする

この記事では OpenWrt の基本的な設定を記載しています。既に OpenWrt のインストールは以下の記事にて完了しています。 cube309b.hatenablog.com

ネットワーク接続図

今回は以下のような接続を念頭に設定を行っていきます。よくあるホームゲートウェイ的な機能や機材は間に存在せず、純粋に ONU のみです。 なお、この段階ではコンソールケーブルのみを接続します (LAN ケーブルはあとで接続)。

設定方法

OpenWrt における設定方法を以下の通りまとめます。 本来であればターミナルや SSH 接続ですべて設定するのが早いのですが、あえてなるべく GUI を使います。 OS に比べると設定量が少ないというのと、個人的にコマンドの羅列だとやってみる気にならないというのもあり・・・。

物理媒体 接続方法 設定方法
コンソールケーブル ターミナル接続 (CLI) uci コマンド、エディタでのファイル書き換え
ネットワークケーブル SSH 接続 (CLI) uci コマンド、エディタでのファイル書き換え
ネットワークケーブル Web ブラウザー接続 (GUI) 画面上でマウスとキーボードで入力

なお、GUI で設定を行う場合は設定後に画面上の「Save & Apply」を押すのを忘れないでください。 あと、「Save & Apply」だけでも反映されずインターフェイスの再起動が必要だったりすることもあって、 起動の早さを生かして OS 再起動で済ませていることがあります。

LAN 内に接続するための事前作業

OpenWrt は LAN インターフェースに既定で 192.168.1.1 が振られていて、かつ DHCP サーバー機能が動いています。 そのままでは既存の LAN に接続できないため、以下の作業を実施します。一部は現行のルーターと入れ替える際にあとで修正します。

  • LAN インターフェース上の DHCP サーバー機能を一時的に停止します
  • LAN インターフェースの IP アドレスを一時的に LAN の値に変更します
  • LAN インターフェースのサブネットマスクを現行の値に変更します
  • LAN インターフェースのデフォルトゲートウェイを一時的に現行の値に変更します
  • LAN インターフェースの DNS 参照先を一時的に現在利用中の DNS サーバーの値に変更します
uci set dhcp.lan.ignore="1"
uci commit dhcp
/etc/init.d/dnsmasq restart
/etc/init.d/odhcpd restart
uci set network.lan.ipaddr="現行の LAN 内の値 (仮)"
uci set network.lan.netmask="現行の LAN 内の値"
uci set network.lan.gateway="現行の LAN 内の値 (仮)"
uci set network.lan.dns="現行の値 (仮)"
uci commit network
/etc/init.d/network restart

本作業が終わったら、eth0 に LAN ケーブルを差します。また、以降は Web ブラウザー or SSH で実施するためコンソールケーブルは抜いても構いません。

OS の基本設定

パッケージリストの更新

まずは日本語化をするために日本語パッケージをインストールします。 パッケージのインストール前には最新版のパッケージリストの取得が必要です。 なお、パッケージリストは OS の再起動の度に消えるため、OS 再起動後にパッケージを操作する場合には本作業が再度必要です。

  1. 作業用端末で Web ブラウザーを起動し、前項で設定したルーターの IP アドレスを入力します。
  2. 初期値でログインパスワードはないため、Login ボタンを押します。
  3. [System]-[Software] Update lists.. を押します。
  4. パッケージリストの最新化が完了するので、Dismiss を押します。
  5. パッケージリストが読み込まれアップデート可能になります。
全体画面、パッケージ管理画面、F/W 画面の日本語化
  1. [System]-[Software] Filterluci-i18n-base-ja と入力し、Install を押します。
  2. 依存関係の確認が行われるので Install を押します。
  3. パッケージが読み込まれるので、Dismiss を押します。
  4. 1-3 を繰り返します。パッケージ名は luci-i18n-opkg-ja です。
  5. 1-3 を繰り返します。パッケージ名は luci-i18n-firewall-ja です。
  6. Logout すると、画面が日本語になります。
タイムゾーンの変更

[システム]-[システム]-[一般設定] タイムゾーンAsia/Tokyo に変更し、保存&適用します。

NTP サーバーの変更

[システム]-[システム]-[時刻同期] NTP サーバー候補ntp.nict.jp あたりに変更し、保存&適用します。 ※ 既定で入っている x.openwrt.pool.ntp.org は「×」で消してから新規に入力する形をとります。

root のパスワード変更

[システム]-[管理]-[ルーターパスワード] パスワードを強力な値に変更し、保存します。

SSH アクセス可能なインターフェイスの限定

[システム]-[管理]-[SSH アクセス] インターフェースlan: に変更し、保存&適用します。

インターフェイスと F/W の原則

インターフェイスと F/W の初期値

OpenWrt の F/W の基本的な考え方は、デバイスインターフェイス・ゾーンの 3 層の構造からなり、ゾーン間で F/W の制御を行います。 詳細な構成要素は以下の通りです。

構成要素 説明
物理デバイス eth0・・・ で表される物理的な LAN ポート
論理デバイス tun0 のように表される仮想的なポート
ブリッジデバイス 物理や論理を束ねる仮想的なポート群。スイッチングハブのように扱われる
インターフェイス 物理、論理、ブリッジの各デバイスが所属する。IP を振ったりする単位
ゾーン インターフェイスが所属する。F/W で制御する単位

絵で表すと以下の通りです。

また、初期のゾーン間の F/W ルールは以下の通りです。

概要
lan ゾーン から wan ゾーンへのアクセスはすべて許可される
wan ゾーンから外部への送信は許可され、NAT される
外部から wan ゾーンへの着信/転送は原則拒否される。(例外はトラフィックルールに定義)
どのゾーンにも含めていないアクセスは、受信/送信が許可、転送が拒否される
インターフェイスと F/W の完成系

一連の設定で目指す形は以下の通りです。なお、可能な範囲で既定の設定を生かします。

また、ゾーン間の F/W ルールは、例外であるトラフィックルールも精査した上で以下の通りになります。 例えば送信も制御をする場合には、 lan ゾーン to wan ゾーンを reject にしてトラフィックルールで例外を定義することになりますが、 この場合、UDP の戻りも手動で定義するなど複雑になるので止めました。

概要
lan ゾーン から wan ゾーンへのアクセスはすべて許可される
wan ゾーンから外部への送信は許可され、NAT される
外部から wan ゾーンへの着信/転送は原則拒否される。(例外はトラフィックルールに定義)
どのゾーンにも含めていないアクセスは、すべて拒否される

絵で表すと以下の通りです。なお、この絵だけ見ると実は OpenWrt の既定値のままなんです。

OS の基本設定 (続き)

既定のアクセス許可ルールを拒否に変更

[ネットワーク]-[ファイアウォール]-[一般設定] 受信/送信の各項目を拒否に変更し、保存&適用します。

wan で拒否した通信をログに残すように変更

[ネットワーク]-[ファイアウォール]-[ゾーン]-[wan ゾーン(編集)]-[詳細設定] このゾーンのログ記録を有効にするチェックし、保存 → 保存&適用します。

トラフィックルールを削除

今回の構成では IPv4 の着信ルールは不要なので削除します。
1. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-DHCP-Renew ルールの削除 を押して消します。
2. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-Ping ルールの削除を押して消します。
3. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-IGMP ルールの削除を押して消します。
4. 保存&適用します。

トラフィックルールの一時的無効化

IPsec VPN を構成するまで不要なルールのため、一時的に無効化します。
1. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-IPSec-ESP ルールの有効化のチェックを外します。
2. [ネットワーク]-[ファイアウォール]-[トラフィック・ルール] Allow-ISAKMP ルールの有効化のチェックを外します。
3. 保存&適用します。

CPU 温度のモニタリング

x86 アーキテクチャーは高性能な反面夏場の温度が心配になります。特に CPU。そのため、モニタリングできるようにしておきます。 なお、触れないほどではないですが結構熱くて真夏が心配になったので、我が家の構成は低回転の USB ファンを導入済みです。

github.com

モジュールは github から取り込む必要があるので、上記から luci-app-temp-status_0.3-5_all.ipk ファイルを作業用端末にダウンロードしておきます。
https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-app-temp-status_0.3-5_all.ipk

  1. [システム]-[ソフトウェア] パッケージをアップロードを押します。
  2. 前項でダウンロードした luci-app-temp-status_0.3-5_all.ipk ファイルを選択した上で、アップロードを押します。
  3. 警告はそのまま、インストールを押します。
  4. パッケージが読み込まれるので、閉じるを押します。
  5. [システム]-[再起動] 再起動するを押します。
  6. トップページの [Temperature] の項目が新たに出現し、温度が表示されているか確認します。

OpenWrt の基本設定を終えて

こうして OpenWrt の基本設定が終わりました。というわけで、次節のインターネット接続という話に続いていきます。

cube309b.hatenablog.com


Note
・ 当ブログは個人主催であり、ブログ中のすべての情報は個人的な観点となります。
・ 情報については正確な内容となるよう努めますが、完全性や正確性、有用性、安全性、最新性について一切保証できかねます。