今回はRaspberry Pi 4にCentOS7をインストールして、 Raspberry Pi 4 をルーターとして使用するための方法を解説していく。
インストール方法は前回の記事「Raspberry Pi 4 にCentOS7をインストールする方法と初期設定」を参考にしてほしい。この記事での初期設定が終わっていることを前提に、手順を解説していく。
実現したいこと
まず、一般的な家庭のネットワーク環境はこんな感じだと思う。
今回はこのように、市販のルーターをRaspberry Pi 4に置き換えたいと思う。
ちなみに私の自宅は光回線はNTT西日本で、プロバイダーはSoftbank光。
必要なもの
WAN側とLAN側にそれぞれにLANポートが必要となるが、Raspberry Pi 4にはLANポートがひとつしかないため、画像のようなアダプターを使ってLANポートを増設する。
速い通信速度を維持するためにも、アダプターは必ず「USB 3.0」対応のものを使うようにしよう。
LANポートは1つしか増設しないため、複数の機器を有線接続する場合は、スイッチングハブも用いて分岐する。スイッチングハブも十分に速度が出るようギガビット対応のものを使おう。
最初の配線図
まずはRaspberry Pi 4のUSB3.0ポートに有線LANアダプターを接続しておく。
いきなりRaspberry Pi 4でインターネットに接続することはできないので、まずは画像のように市販のルーターのLANに接続し、同じLAN内のPCから遠隔(SSH)で作業を行っていく。
今回はRaspberry Pi 4本体のLANポートを
ホスト名の変更
初期設定のままだと、loclhostとなっているため、まずはホスト名を変更する。今回はホスト名を「gateway」とする。(この手順は必須ではない。)
- [root@localhost ~]# hostnamectl set-hostname gateway
- [root@localhost ~]# exit
- 一度、ログアウトし再度ログインすると、ホスト名が変更できているのが分かる
- [root@gateway ~]#
SELinuxの無効化
SELinuxが有効になっていると、PPPoE接続できないため、無効化しておく。
getenforceと打って、「Enforcing」が表示されればSElinuxが有効、「Disabled」と表示されれば無効になっている。
- [root@gateway ~]# getenforce
Enforcing
有効になっている場合は、設定ファイルを書き換える。
- [root@gateway ~]# vi /etc/selinux/config
enforcingをdisabledに書き換える。
- # This file controls the state of SELinux on the system.
- # SELINUX= can take one of these three values:
- # enforcing - SELinux security policy is enforced.
- # permissive - SELinux prints warnings instead of enforcing.
- # disabled - No SELinux policy is loaded.
- SELINUX=disabled
- # SELINUXTYPE= can take one of three values:
- # targeted - Targeted processes are protected,
- # minimum - Modification of targeted policy. Only selected processes are protected.
- # mls - Multi Level Security protection.
- SELINUXTYPE=targeted
書き換えたら設定反映のために、一度 再起動する。
LANアダプターの設定
まずは接続されているインターフェイスの状態を確認する。
- eth0 - Raspberry Pi 4本体のLANポート
- enp1s0u2 - LANアダプターで増設したLANポート
LANアダプターは機器によって、デバイス名が異なることもあるので、各自の環境に合わせて読み替えてほしい。
- [root@gateway ~]# nmcli device
- DEVICE TYPE STATE CONNECTION
- eth0 ethernet connected Wired connection 1
- wlan0 wifi disconnected --
- p2p-dev-wlan0 wifi-p2p disconnected --
- enp1s0u2 ethernet unavailable --
- lo loopback unmanaged --
- [root@gateway ~]# nmcli c
- NAME UUID TYPE DEVICE
- Wired connection 1 e87a1b04-(以下略) ethernet eth0
- Wired connection 2 c12cfa33-(以下略) ethernet --
LAN側になるenp1s0u2の設定をしていく。インターフェース設定ファイルを作成する。
- [root@gateway ~]# vi /etc/sysconfig/network-scripts/ifcfg-enp1s0u2
すでにファイルがある場合は赤字が変更・追記する部分。ファイルがなければ同様の内容で新規作成する。新規作成の場合、UUIDはUUIDを生成できるwebページ等で生成したものを使用する。
- TYPE=Ethernet
- PROXY_METHOD=none
- BROWSER_ONLY=no
- BOOTPROTO=none
- DEFROUTE=no
- IPV4_FAILURE_FATAL=no
- IPV6INIT=no
- IPV6_AUTOCONF=no
- IPV6_DEFROUTE=no
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=enp1s0u2
- UUID=a965cdec-(以下略)
- DEVICE=enp1s0u2
- ONBOOT=yes
- IPADDR=192.168.1.254
- NETMASK=255.255.255.0
- PREFIX=24
ネットワークを再起動し、インターフェースの状態を確認する。
- [root@gateway ~]# systemctl restart network
追加したenp1s0u2が有効になっていることが分かる。
- [root@gateway ~]# nmcli device
- DEVICE TYPE STATE CONNECTION
- eth0 ethernet connected Wired connection 1
- enp1s0u2 ethernet connected enp1s0u2
- wlan0 wifi disconnected --
- p2p-dev-wlan0 wifi-p2p disconnected --
- enp1s0u2 ethernet unavailable --
- lo loopback unmanaged --
- [root@gateway ~]# nmcli c
- NAME UUID TYPE DEVICE
- Wired connection 1 e87a1b04-(以下略) ethernet eth0
- enp1s0u2 a965cdec-(以下略) ethernet enp1s0u2
これで増設したLANポートの設定が完了した。
必要な機能のインストール
この後、配線を変えて一時的にネットに接続できなくなるので、事前に必要なものをインストールしておく。
プロバイダーにPPPoE接続するための、NetworkManager-pppをインストールする。
- [root@gateway ~]# yum -y install NetworkManager-ppp
LAN内の機器にIPアドレスを割り当てるため、DHCPサーバーの機能を追加する。
- [root@gateway ~]# yum -y install dhcp
DHCPサーバーの設定ファイルを作成する。
- [root@gateway ~]# vi /etc/dhcp/dhcpd.conf
- #ネームサーバーのホスト名, またはIPアドレス指定
- #とりあえず、パブリックDNSサービス8.8.8.8を指定しておきます
- option domain-name-servers 8.8.8.8;
- #デフォルト貸出期間
- default-lease-time 600;
- #最大貸出期間
- max-lease-time 7200;
- #正当なDHCPサーバーであることの宣言
- authoritative;
- #ネットワークアドレスとサブネットマスク指定
- subnet 192.168.1.0 netmask 255.255.255.0 {
- #貸し出すIPアドレスの範囲指定
- range dynamic-bootp 192.168.1.10 192.168.1.253;
- #ブロードキャストアドレス指定
- option broadcast-address 192.168.1.0;
- #ゲートウェイアドレス指定
- option routers 192.168.1.254;
- }
DHCPサービスを起動し、自動起動を有効にしておく。
- [root@gateway ~]# systemctl start dhcpd
- [root@gateway ~]# systemctl enable dhcpd
- Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
- [root@gateway ~]#
IPフォワーディングの有効化
LAN側のネットワークとWAN側のネットワークの間で通信ができるよう、IPフォワーディングを有効化しておく。
まずは、IPフォワーディングが無効・有効になっているか確認する。0の場合は無効、1の場合は有効。
- [root@gateway ~]#cat /proc/sys/net/ipv4/ip_forward
0
IPフォワーディングを有効化するため、下記の通りファイルを開き、設定を追記します。
- [root@gateway ~]#vi /etc/sysctl.conf
- # sysctl settings are defined through files in
- # /usr/lib/sysctl.d/, run/sysctl.d/, and /etc/sysctl.d/.
- #
- # Vendors settings live in /usr/lib/sysctl.d/.
- # To override a whole file, create a new file with the same in
- # /etc/sysctl.d/ and put new settings there. To override
- # Only specific settings, add a file with a lexically later
- # name in /etc/sysctl.d/ and put new settings there.
- #
- # For more information, see sysctl.conf(5) and sysctl.d(5)
- net.ipv4.ip_forward=1
ネットワークを再起動する。
- [root@gateway ~]# systemctl restart network
IPフォワーディングが有効になっているか確認する。
- [root@gateway ~]#cat /proc/sys/net/ipv4/ip_forward
1
配線の変更
以上の手順で、事前の準備は終わったので、画像のようにルーターをRaspberry Pi 4に置き換えるように配線する。画像のグレーの配線はインターネットが不通であることを表している。
ここからはRaspberry Pi 4のLAN内にPCを接続し、SSHで接続し作業を行う。接続するとDHCPによりIPアドレスは割り当てられるが、インターネットは不通だ。
プロバイダーにPPPoE接続
PPPoE接続の前に、WAN側となるeth0の接続名が初期設定で「Wired connection 1」となっており。このままだと後々厄介なので、接続名もeth0とし、デバイス名と統一する。
- [root@gateway ~]#nmcli c m "Wired connection 1" connection.interface-name eth0 connection.id eth0
デバイスeth0の接続名がeth0に変更された。
- [root@gateway ~]# nmcli c
- NAME UUID TYPE DEVICE
- eth0 e87a1b04-(以下略) ethernet eth0
- enp1s0u2 a965cdec-(以下略) ethernet enp1s0u2
インターネットに接続するため、プロバイダーにPPPoE接続する。
- [root@gateway ~]# nmcli connection add type pppoe ifname eth0 con-name PPPoE username ユーザー名 password パスワード mtu 1454
接続 'PPPoE' (0dc31dae-以下略...) が正常に追加されました。
PPPoE接続が追加された。
- [root@gateway ~]# nmcli c
- NAME UUID TYPE DEVICE
- eth0 e87a1b04-(以下略) ethernet eth0
- enp1s0u2 a965cdec-(以下略) ethernet enp1s0u2
- PPPoE 0dc31dae-(以下略) pppoe --
間違って作成してしまった場合は、作成したPPPoEのUUIDを指定して、接続を削除できる。
- [root@gateway ~]# nmcli connection delete 0dc31dae-cdd8-428b-806c-ed708ece961f
PPPoE接続を有効にする
PPPoE接続を有効にする。
- [root@gateway ~]# nmcli c up PPPoE
- Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
切断する場合は「nmcli c down PPPoE」で切断できる。
- [root@gateway ~]# nmcli c down PPPoE
- Connection 'PPPoE' successfully deactivated (D-Bus active path: /org/freedesktop /NetworkManager/ActiveConnection/4)
eth0の自動接続をオフにし、PPPoEの自動接続をオンにしておく。これにより次回以降、Raspberry Pi 4を再起動したときに、自動的にPPPoE接続が有効になる。
- [root@gateway ~]# nmcli con mod eth0 connection.autoconnect "no"
- [root@gateway ~]# nmcli con mod PPPoE connection.autoconnect "yes"
MTU/MRUを設定しておく。
- [root@gateway ~]# nmcli connection modify PPPoE ppp.mtu 1454
- [root@gateway ~]# nmcli connection modify PPPoE ppp.mru 1454
IPマスカレード
ここまでの手順でRaspberry Pi 4本体はWAN側のインターフェースeth0を通じて、インターネットに接続できたが、まだLAN側の機器はインターネット不通の状態。
ここからfirewalldを使ってLAN側の機器にもインターネット接続が提供されるように設定していく。
firewalldのzoneを、 WAN側をexternal、LAN側をinternalに設定する。 nmcliを使うことで設定を永続化できる。
- nmcli c mod PPPoE connection.zone external
- nmcli c mod enp1s0u2 connection.zone internal
補足:firewalld-cmdでも以下のように同じことができるが、externalは--permanentオプションを使用しても設定を永続化できないため、注意が必要だ。
- [root@gateway ~]# firewall-cmd --zone=external --change-interface=ppp0
- [root@gateway ~]# firewall-cmd --zone=internal --change-interface=enp1s0u2
- [root@gateway ~]# firewall-cmd --reload
以上の手順で、LAN側の機器にインターネット接続が提供される。
新しい機器を接続しても、DHCPサーバーで自動的にIPアドレスが割り当てられ、インターネットに接続できる。後は念のため再起動を行って、再起動しても正常に動作するか確認しよう。
注意点
WAN側のzoneであるextarnalはデフォルトでSSH(22番)の着信接続を許可している。このためSSHのポート番号を変更しておく、もしくはexternalではSSHの着信接続を許可しないように設定しておいたほうが良いだろう。もちろんrootのパスワードも必ず初期設定とは別のものに変更しておこう。
ここからの応用
ここからLAN内にファイルサーバーを置いて、Raspberry Pi 4にVPNサーバーの機能を持たせて、外出先からLAN内にアクセスし、ファイルサーバーのファイルを利用する等の使い方もできる。
COMMENTS
I have been reading out some of your stories and i must say pretty nice stuff. I will make sure to bookmark your blog. Bria Hersch Weihs