今家にルーターが欲しくて自作したので、せっかくだから共有します。
ご家庭に埋もれたPCやラズパイ、無線/有線併用のルーターにしませんか?
記事の構成
前後編に分けてまとめて行きたいと思います。ハマったところは主にPC環境構築です。
- その1. ルーター構成と必要知識の紹介
本記事です。ここではルーターの構成と、その構成要素として必要な技術を紹介します。
- ルーター構成の説明
- どんなものか?ユースケースの紹介
- 構成概要
- 必要技術: LANを構築する。
- bridgeインターフェイス
- NATからの外部アクセス
- DHCP
- DNS
- 必要技術: LAN側デバイスを立ち上げる。
- ethernetデバイス
- 無線デバイス
- その2. 作成ソフトウェアの紹介と導入例
次回まとめます。⇒まとめました
実際に作成したソフトウェア、導入機材その構成要素として必要な技術を紹介します。
- ソフトウェア説明・使い方
- ソフトウェアの導入: 必要機材
- ソフトウェアの導入: PC環境構築
1. ルーター構成の説明
ユースケース
- ご家庭内で、スマホやPC等、複数のマシンをインターネットにつなぎたい!(LANを構築したい)
- 間取り上プロバイダの無線も有線も使いたい!
- 余ってるPCで遊びたい!
そんなケースで役に立つルーターです。今もそのルーターを使って書き込みをしています。
市販の無線ルーターを買えばいいのでは
構成概要
次回のソフトウェア構成も入っていますがこんな感じ。
緑の部分がソフトで何かしないといけないもの。これらを実現するために最初に記載した技術が必要です。
どれもLinuxのコマンドで簡単に出来ます。
余談:bridgeを使うのでwifi, ethernet以外にもデバイスがあるぜ!というコアな方もプラグインを作ればLANに追加可能です。このあたりは次回
2. 必要技術: LANを構築する。
ここではLAN制御の為に使用するコマンドを紹介します。全てroot権限での実行です。
bridgeインターフェイス
複数のデバイス全部に別ネットワークを構築するのは大変なので、bridgeインターフェイスという仮想インターフェイスを作成してLANネットワークをまとめ上げます。
今回は図のようにethernet, wifiをまとめます。
事前準備
brctl
というコマンドを使います。もし環境にない場合は、bridge-utils
パッケージをインストールをしてください。
apt install bridge-utils
#or
yum install bridge-utils
また、インターフェイス設定にifconfig
を使いたいけどip
しかないという方はnet-tools
をインストールしてください。
apt/yumのコマンドは以降省略
設定手順
1.インターフェイスを作成する。ここではbr0を作成します。
brctl addbr br0
2.インターフェイスにIPアドレスを振る。ip addr add
やifconfig
等でIPを振ってください。
ifconfig br0 192.168.1.1 netmask 255.255.255.0
3.立ち上がっているネットワークインターフェイスを追加する。
brctl addif br0 eth0
※追加するネットワークインターフェイスにIPが振られているとうまく動作しないので注意です。
ifconfig eth0 0.0.0.0
設定の確認はbrctl show
で出来ます。
うちの設定はこんなの。interfacesに追加したデバイスがあればOK
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.503eaa726d10 no enp0s20u4c2
wlp2s0
NATからの外部アクセス
外部ネットワークとアクセスするための転送設定を行います。
事前準備
iptables
というコマンドを使います。もし環境にない場合は、iptables
パッケージをインストールをしてください。
設定手順
1.ipv4の転送設定を有効にする。
sysctl -w net.ipv4.ip_forward=1
#or
echo "1" > /proc/sys/net/ipv4/ip_forward
2.iptablesの設定に以下を追加する。ざっくりいうと「NAT側のパケットをeth0に転送しますよ」って感じなので、コマンドのwan0はWAN側のインターフェイスになります。
iptables -t nat -A POSTROUTING -o wan0 -j MASQUERADE
これで固定IPで接続したとしても外部アクセスとしてping 8.8.8.8
くらいは届くようになると思います。
DHCP
固定IPだけだと使いにくいので、DHCPサーバーを導入しましょう。
DHCP && DNS
外部サイトにアクセスするためにDNSサーバーも導入したいので、dnsmasq
というコマンドを使います。これはDHCP, DNSの両方が使えるコマンドです。
dnsmasq
というコマンドをインストール。DNSサーバーとして動作させるならdnsmasq
と実行するだけ。DHCPとしても使う場合は、/etc/dnsmasq.confに以下のような設定をしてあげます。
#192.168.1.100~254を割り振り。IPアドレスのリース時間は最後に
dhcp-range=192.168.1.100,192.168.1.254,86400
#こんな感じにネットマスクもまとめて設定できます。
#dhcp-range=192.168.1.100,192.168.1.254,255.255.255.0,86400
Linux環境設定/dnsmasqをDHCPサーバとして使う場合の最小限の設定例
DHCPのみ
dhcpサーバーのみの場合。今回はdhcpd
というコマンドを使用しています。dhcpd
パッケージをインストールをしてください。
1.設定ファイルを作成。192.168.1.1がルーター&&DNS。下100~254をアドレスとして使用可能にした場合の例です。
#IPアドレスのリース時間とその最大値(秒)
default-lease-time 86400 ;
max-lease-time 86400 ;
#syslog出力レベル
log-facility local7;
#mainの設定。
subnet 192.168.1.0 netmask 255.255.255.0 {
#192.168.1.100~254を割り振り
range 192.168.1.100 192.168.1.254;
#netmask指定
option subnet-mask 255.255.255.0;
#default gateway指定
option routers 192.168.1.1;
#DHCPで割り当てるDNSサーバー指定
option domain-name-servers 192.168.1.1;
}
2.起動。systemctl start dhcpd
でもいいんですが、IF指定したいので敢えて直実行方法を記載。こんな感じでIF指定可能です。
/usr/sbin/dhcpd -f -cf /etc/dhcpd.conf -user dhcpd -group dhcpd --no-pid br0
※最初はVirtualBox環境内、Ubuntuで構築しようとしていたのですが、VirtualBoxとの導通がうまく取れなかったので断念。
3. 必要技術: LAN側デバイスを立ち上げる。
ethernetデバイス
これだけです、簡単。今回はIPアドレスの初期化(ifconfig eth0 0.0.0.0
)を忘れずに
#立ち上げ
ifconfig eth0 up
#停止
ifconfig eth0 down
無線LANデバイス
こちらは無線アクセスポイントを立ち上げる必要があります。これもコマンドで実行できます。
ものによってはdriverの追加も必要なのですが、私の環境はいらなかったのでdriver追加は省略。
事前準備
wpa_supplicant
というコマンドを使います。もし環境にない場合は、wpa_supplicant
パッケージをインストールをしてください。
hostapd
というコマンドでもAP動作可能です。
設定方法
1.設定ファイルを作成。mode=2がアクセスポイントの意味。これは2437MHzの周波数帯でssid "testssid"をWPA2-PSKのパスワード"testpassword"で起動しています。ctrl_interfaceは後で使います。
ctrl_interface=/var/run/wpa_supplicant_lan
network={
ssid="testssid"
mode=2
proto=WPA2
psk="testpassword"
frequency=2437
}
2.起動。うまくいけば数秒でスマホ等からもSSIDが見えるようになります。
/sbin/wpa_supplicant -i wlan0 -b br0 -c /usr/local/share/wpa_supplicant.conf -d nl80211
ちなみに、無線のネットワークインターフェイスはwpa_supplicant実行前でもいることはいるので、ifconfig -a
で名前の確認をした上でコマンド実行してください。
また、nl80211
はドライバ名ですので、非サポートのデバイスなら別のドライバを指定する必要があります。
3.状態を確認。wpa_cli
というコマンドで、confに記載したctrl_interfaceにアクセスします。
$wpa_cli -p /var/run/wpa_supplicant_lan/ status
Selected interface 'wlan0'
wpa_state=DISCONNECTED
...
前編まとめ
ルーターを作るというとちょっとハードルが高く見えるけど、そのための情報・ソフトウェアは世の中に転がっていますね。
導通した時の達成感は中々のものですので、皆さんも試してみてはいかがでしょうか?
後編でこれらを使った自作ソフトウェアと導入、環境構築について説明しますので、手番が多くて面倒という方のお役に立てれば幸いです。
2018/08/05 dnsmasqでのDHCPサーバー構築手順を追加しました。
参考情報
必要パッケージまとめ
bridge-utils
net-tools
iptables
dhcpd (/usr/sbin/dhcpdを直打ちしています)
dnsmasq
wpa_supplicant(無線用)
記事素材: いらすとや
- bridgeインターフェイス
いますぐ実践! Linux システム管理 / Vol.162 brctl でLinuxマシンをHUBにする
- NATからの外部アクセス
natテーブルを利用したLinuxルータの作成
設定ファイル直書きはやだなと思って調べた結果sysctl -w net.ipv4.ip_forward=1
に行きついたサイト
7.4. FORWARD と NAT のルール
- DHCP
設定ファイルはインストール時の/etc/dhcp/dhcpd.confに書かれていた、「/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example」を参考にしました。
インターフェイス指定コマンド実行の参考
centos7 dhcpd interfaceの記述の件
VMのUbuntuでdhcpを試した時の参考はこちら
Ubuntuのデフォルト、udhcpd
dnsmasqの参考予定
dnsmasqをDHCPサーバとして使う場合の最小限の設定例
- 無線LANデバイス
地味にNATの話も書いてあっておおって思った
WiFi access point with wpa_supplicant