前回は Windows Server をルータにする手順を紹介した。
今回は、CentOS をルータにする手順を紹介する。
Contents
検証環境
本記事の検証環境は上図のようになっている。
CentOS のバージョンは7.4(Minimal)を使用する。
CentOS のバージョン確認方法
CentOS のバージョンは以下のコマンドで確認できる。
※以降、わかり易いようにコマンド・設定変更箇所はこの色で記述する。
CentOS Linux Release 7.4.1708 (Core)
ネットワークの基礎になるが、”192.168.1.1″ の Windows 10 端末と “192.168.2.2” の Windows 10 端末は相互に通信が通らない。本記事では CentOS 7.4 のIPアドレスの設定から手順を紹介していくが、例え CentOS 7.4 に適切なIPアドレスを設定したとしても、それは同様だ。
なお、IP アドレスの設定方法など、 Linux の操作方法に問題がない場合は「IP フォワーディングの有効化」から読んでいただければ、すぐにでも CentOS をルータにすることが可能だ。
IP アドレスの設定
Linux に限らず、デバイスをルータにしたいのであれば、まずは NIC に IPアドレスを設定しなければ始まらない。今回の検証環境の CentOS には NIC が2つ存在するので、それぞれに IP アドレスを設定する必要がある。
まず、CentOS にログイン後、以下のコマンドを実行することで インターフェースの状態を確認することができる。
以下のような結果が返ってくるだろう。つまり、2つの NIC が無効化されている。
Linux はデフォルトで NIC が無効化されている場合がある。今回の CnetOS 7.4 (Minimal) もそれに該当している。
NIC の有効化と IP アドレスの設定は、以下のコマンドで同時に行うことが可能だ。
[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
※「enp0s3」の部分は上記で実行した「nmcli device」コマンドの結果に従う。
コマンドを実行すると以下のようなコンフィグファイルが開かれる。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=0c504f71(以下省略)
DEVICE=enp0s3
ONBOOT=no
上記のコンフィグを編集していく。vi で開いたため、キーボードの「i」を押してインサートモードに移行する。
最終的に以下になるようファイルを編集する。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=0c504f71(以下省略)
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.1.254
NETMASK=255.255.255.0
※「ONBOOT」と「IPADDR」の間の空行は不要だが、追加した行を区別するために今回は挿入している。
編集が完了したらキーボードの「ESC」を押下し、インサートモードから抜ける。その状態で「:wq」を入力し、エンターを押下することで保存が完了する。もしも間違ってしまい、保存せずに終了したい場合は「:q!」だ。
同じように2つ目の NIC の IP アドレスも設定する。
[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
先ほどと同様の編集を行い、内容を保存する。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=f118c10c(以下省略)
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.2.254
NETMASK=255.255.255.0
修正が完了したら、「reboot」コマンドで CentOS を再起動する。
起動後に「nmcli device」コマンドを実行すると、以下のように NIC がアクティブになっているはずだ。
疎通確認
Cent OS の インターフェース設定(NIC の有効化と IP アドレスの設定)を行ったことで、冒頭の検証環境通りの構成となっている。
しかし、先述したが “192.168.1.1” ⇔ “192.168.2.2” は通信ができない。
ifcfg の編集箇所について
上記の手順では、”IPADDR” と “NETMASK” 以外にも「BOOTPROTO」と「ONBOOT」というパラメータを修正した。それぞれの修正理由を下記に記す。
「BOOTPROTO=dhcp」の場合どうなるのか
“none” に書き換えた「BOOTPROTO」の値をデフォルトの「dhcp」に戻すとどうなるのか。
BOOTPROTO=dhcp
下図のように、「connecting (getting IP configuration)」となる。
通信自体は問題なさそうに見えるが、実際は ping に応答しなくなる。
「ONBOOT=no」の場合どうなるのか
“yes” に書き換えた「ONBOOT」の値をデフォルトの「no」に戻すとどうなるのか。
ONBOOT=no
下図のように、「disconnected」となる。つまり、再起動後にインターフェースが up しなくなる。
当然、ping にも応答しない。
IP フォワーディングの有効化
ここからが CentOS のルータ化に必要な手順となるが、実際はパラメータを1行追加するだけだ。
それは、IP フォワーディングを有効化するためのパラメータだが、まずは IP フォワーディングが無効化されていることを確認するために、以下のコマンドを実行する。
[root@localhost ~]#cat /proc/sys/net/ipv4/ip_forward
0
値として「0」が返ってくるはずだ。この状態が IP フォワーディングが無効化されている状態となる。
IP フォワーディング
IPフォワーディングとは、二つ以上のネットワークインターフェースやIPアドレスを持つネットワーク機器などで、一方が受信したIPパケットを一定のルールに基づいてもう一方から送信すること。IP通信の中継。ルーティングとは異なる。詳細はこちらを参照。
「sysctl.conf」にパラメータを追加
IP フォワーディングを有効化するためには、以下のコマンドを実行し、開いたファイルにパラメータを1行追加する。
[root@localhost ~]#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)
最終的に以下になるようファイルを編集し、保存する。
# 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
保存が完了したら再起動を実施する。
IP フォワーディングの確認
起動後に以下のコマンドを実行すると、出力される値が「1」に変わっているはずだ。
[root@localhost ~]#cat /proc/sys/net/ipv4/ip_forward
1
これで CentOS をルータとして構築するための手順は終了だ。
結局のところ、IP アドレスの設定さえ終了していれば、ルータとして機能させるには「net.ipv4.ip_forward=1」というパラメータを1行追加するだけでいい。