LoginSignup
50

More than 5 years have passed since last update.

有線/無線LANルーターを作ろう!~前編. ルーター構成と必要知識

Last updated at Posted at 2018-07-28

今家にルーターが欲しくて自作したので、せっかくだから共有します。
ご家庭に埋もれたPCやラズパイ、無線/有線併用のルーターにしませんか?

記事の構成

前後編に分けてまとめて行きたいと思います。ハマったところは主にPC環境構築です。

  • その1. ルーター構成と必要知識の紹介

本記事です。ここではルーターの構成と、その構成要素として必要な技術を紹介します。

  1. ルーター構成の説明
    1. どんなものか?ユースケースの紹介
    2. 構成概要
  2. 必要技術: LANを構築する。
    1. bridgeインターフェイス
    2. NATからの外部アクセス
    3. DHCP
    4. DNS
  3. 必要技術: LAN側デバイスを立ち上げる。
    1. ethernetデバイス
    2. 無線デバイス
  • その2. 作成ソフトウェアの紹介と導入例

次回まとめます。⇒まとめました
実際に作成したソフトウェア、導入機材その構成要素として必要な技術を紹介します。

  1. ソフトウェア説明・使い方
  2. ソフトウェアの導入: 必要機材
  3. ソフトウェアの導入: PC環境構築

1. ルーター構成の説明

ユースケース

  • ご家庭内で、スマホやPC等、複数のマシンをインターネットにつなぎたい!(LANを構築したい)
  • 間取り上プロバイダの無線も有線も使いたい!
  • 余ってるPCで遊びたい!

そんなケースで役に立つルーターです。今もそのルーターを使って書き込みをしています。
市販の無線ルーターを買えばいいのでは

構成概要

次回のソフトウェア構成も入っていますがこんな感じ。

base.png

緑の部分がソフトで何かしないといけないもの。これらを実現するために最初に記載した技術が必要です。

どれも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 addifconfig等で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をアドレスとして使用可能にした場合の例です。

dhcpd.conf
#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は後で使います。

wpa_supplicant.conf
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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50