ミニPCをUbuntuで無線LANルーター化
動機
NAS+自宅サーバ+ルータの機能が一台でできたら機器も減って、きっと省電力のはず。拠点間のVPNとかも簡単にはれそうだし。あとルータ回りでトラブルよくわかるけど、原因自分では深く追えないし、いっそのこと自分で構築する?みたいなところからスタートしています。
ひとまずは実家のルータ+NASにと、Celeron J4105のLANポートが二つついているミニPC「Kodlix GK45」にSSDを追加して、仕上げてみました。
導入したOS
Ubuntu Server 20.04.3 LTS
完成イメージ
2つあるLANポートのうち、一つをWAN側に、もう一つをLAN側にします。
LANのアドレスは
192.168.1.0/24
Wifiの親機としても動いて、WiFiで接続してきた子機も同じLANに繋ぎます。
(よくある無線LANルータの設定)
インターフェース名の調べ方
対応するポートがなんというインターフェース名か(OSでなんという名前で扱われているか)は
ip a
と入力して調べます。LANポートの場合抜き差しすると状態がかわるので、LANポートが複数ある場合は、ポートに抜き差しして、どのインターフェースに変化があるかをしらべて、インターフェース名を特定します。
自分のGK45では下記のようなインターフェース名でしたので、以下、下記の名前で設定していきます。
- WAN用のポートにする有線LANインターフェース:eno1
- LAN用のポートにする有線LANインターフェース:enp3s0
- WiFiインターフェース:wlo2
ルーターに仕立てる設定1:netplan
最近のUbuntuはネットワークの設定をするのはnetplanを使うのが流儀のようです。
netplanで設定していきます。
netplanの設定ファイルは
/etc/netplan/
にあるすべてのファイルを辞書順に読んでいくようです。
ディレクトリにあるすべてのファイルを別の場所に移し、こちらに以下の内容のファイルをつくります。
network: ethernets: eno1: dhcp4: true enp3s0: dhcp4: false optional: true bridges: br0: interfaces: [enp3s0] addresses: [192.168.1.1/24] nameservers: addresses: [8.8.8.8, 8.8.4.4] optional: true version: 2
そのうえで
sudo netplan apply
を実行します。
ここで行っているのは以下の設定です。
eno1はDHCPでアドレスを取得する。
enp3s0ではDHCPでアドレスを取得しない。
br0というブリッジを作り
そこにenp3s0をつなげる
IPアドレスを192.168.1.1
DNSを8.8.8.8, 8.8.4.4
ここで注意ですが、WiFiはnetplanでは扱いません。
(最初はNetplanでやろうとしていたのですが、うまくいかずやめました)
後ほどここで作ったbr0というブリッジにWiFiもつなげます。
ルーターに仕立てる設定2:DHCPサーバ
DHCPサーバを立てます。isc-dhcp-serverを使います。
インストール
sudo apt install isc-dhcp-server
設定ファイルの記述
通常起動したときに監視するインターフェースを指定します。
編集ファイル:/etc/default/isc-dhcp-server
INTERFACESv4="br0" INTERFACES="br0"
(INTERFACESv4だけでもいいかもしれませんが、一応念のため)
DHCPで払い出す内容の設定:/etc/dhcp/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 600; max-lease-time 7200; subnet 192.168.1.0 netmask 255.2ip55.255.0 { option routers 192.168.1.1; option broadcast-address 192.168.1.255; option subnet-mask 255.255.255.0; range 192.168.1.100 192.168.1.254; }
適用
sudo systemctl enable isc-dhcp-server sudo systemctl start isc-dhcp-server
ルーターに仕立てる設定3:NAT
ufwを使用して設定するのが最近の推奨みたいなので、ufwで設定します。
参考:
ufwでNATとポートフォーワード - Qiita
DEFAULT_FORWARD_POLICY=“ACCEPT"
/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
/etc/ufw/before.rules (最後に追記)
# NAT *nat :POSTROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0] -F -A POSTROUTING -s 192.168.1.0/24 -o eno1 -j MASQUERADE COMMIT
(LANからきた通信を、eno1にとおします)
ufw有効化
ufwを有効化すると、基本すべてのポートの通信ができなくなるので、あらかじめ必要なポートを開放しておきます。
ここでは、22番ポート(SSH)と、LAN内からの通信はすべてOKの設定にします。
sudo ufw allow ssh sudo ufw allow in on br0 to any
有効化
sudo ufw enable
(iptables-persistentなどをインストールしてしまっていると、再起動時にufwが無効化されるので注意(はまった))
ルータに仕立てる設定4:WiFi
hostapdを使います。
インストール
sudo apt install hostapd
設定ファイルの場所を記述
/etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
設定ファイルの内容例
/etc/hostapd/hostapd.conf
interface=wlo2 bridge=br0 channel=7 logger_syslog=-1 logger_syslog_level=1 auth_algs=1 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP ssid=myssid wpa_passphrase=myoasswd hw_mode=g ieee80211n=1 ieee80211ac=0
bridge=br0
とすることで、このWiFiAPをbr0ブリッジに接続されるようになります。
また、
ieee80211n=1
ieee80211ac=1
などと書かないと、11n, 11ac通信が使えません。
hw_modeは、2.4gHz帯ならばg、5gHz帯ならばaになります。
(手元のGK45は5gHz帯に2.4gHz帯で設定していますs。
sudo enable hostapd sudo start hostapd
ここまでで、よくある無線LANルータの設定になりました。
ここから色々VPNで他拠点とつないだりとか、NASとしての機能を設定したり、Jenkinsなどをたてて自宅サーバとして色々させてみたりとか、やりたいことがUbuntuなので簡単にネットで検索して実現できそうです。
さらにニッチな設定については機会があれば別記事で。