PCをルーターにする

手元のLinuxマシンをルーターにして、別のPCや機材をその先にぶら下げたい場面があった。ipiptablesdnsmasq を自分で設定してもよいが、linux-routerを使うと1コマンドで済む。

linux-routerとは

lnxrouter という1ファイルのbashスクリプト。内部で ip / iptables / dnsmasq / hostapd といったコマンドをまとめて叩いてくれるラッパーで、以下のようなことができる。

  • インターネット接続を別のインターフェース(有線LANなど)に共有する(NATルーター化)
  • WiFiアクセスポイントを立てる
  • インターネットに繋がらないローカルLANだけを作る

create_ap というスクリプトのForkで、そちらは以下の記事で紹介されている。

コマンド一発でLinuxマシンを即席無線LANルーターにできる「create_ap」がすごい便利だった - Qiitacreate_apとは 一言で言っちゃえば、Windowsで言うところの「Virtual Wifi」みたいな機能を提供してくれるシェルスクリプトです。 無線LANチップが乗っているLinuxマシンがあれば即席のアクセスポイントを作ってくれて、無線LANルーターにしてくれる...Qiita

依存パッケージ

以下が必要。WiFiアクセスポイントを立てる場合のみ、追加のパッケージが必要になる。

  • 共通: bash, procps(procps-ng), iproute2, dnsmasq, iptables(nftablesのiptables-nft互換でも可)
  • WiFiアクセスポイント用: hostapd, iw(またはiwconfig)

インストール

スクリプト1つをダウンロードして実行権限を付けるだけ。インストール作業は不要。

curl -O https://raw.githubusercontent.com/garywill/linux-router/master/lnxrouter
chmod +x lnxrouter

使い方

インターネット接続を eth1 側に共有する(eth1 に繋いだ機器がインターネットに出られるようになる)。

sudo ./lnxrouter -i eth1

WiFiアクセスポイントを立てる。

sudo ./lnxrouter --ap wlan0 MyAccessPoint -p MyPassPhrase

インターネットに出ないローカルLANだけを作る場合は -n を付ける。

sudo ./lnxrouter -n -i eth1

Ctrl+C で終了すると、設定した内容が元に戻される。バックグラウンドで動かしている場合は --stop で止める。

sudo ./lnxrouter --stop <id>

iptables のルールやインターフェースの設定を書き換えるので、実行にはroot権限が必要。既存のネットワーク設定と競合しないか確認してから使うのが安全。

参考

GitHub - garywill/linux-router: Set Linux as router in one command