2020-04-24

[CentOS 8] IP マスカレードの設定

先日、衝動的に買った 4 つの NIC を搭載したミニ PC [1] に、CentOS 8 をインストールしました。IP マスカレードの設定についてしっかり理解をしたいというのがそもそもの動機です。ちょっと贅沢な動機ですが、いまどきのやり方を身に着けるための投資と考えています。

firewalld で IP マスカレードを設定

てはじめに、下記のような構成のネットワークを作ってみました。

  • 一番目の ETH0 (enp1s0) は、ケーブルテレビ会社からレンタルしているルータ (BCW720J) と接続したネットワーク (192.168.0.0/24)(接続済み)
  • 二番目の ETH1 (enp2s0) は、評価用に使うネットワーク (192.168.2.0/24)

今回は学習が目的ですので、前述した複数の NIC を搭載した CentOS 8 サーバーを家庭内 LAN 内に繋げて、さらにプライベートな LAN を構成しました。この CentOS 8 サーバーに繋がっているネットワークデバイスのインターフェイス enp1s0(家庭内 LAN 側)と enp2s0(プライベートな LAN)の間に IP マスカレードを設定します。

なお、設定の方法は、参考書 [2] の「14-3-2 firewalld におけるIPマスカレード(NAT)の設定」472頁~を参考にしました。

 CentOS 8 

IP フォワーディングの有効化

まず、カーネルパラメータを記述する /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

追加したカーネルパラメータを有効にします。実際に IPv4 のフォワーディングが有効になったかどうかは /proc/sys/net/ipv4/ip_forward の値で確認できます。

[bitwalk@cnction ~]$ sudo sysctl -p
net.ipv4.ip_forward = 1
[bitwalk@cnction ~]$ cat /proc/sys/net/ipv4/ip_forward
1
[bitwalk@cnction ~]$

 CentOS 8 

ゾーンの設定

IP マスカレードを設定するネットワークデバイスのインターフェイス enp1s0(家庭内 LAN 側)と enp2s0(プライベートな LAN)のゾーンをそれぞれ home と internal に設定します。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=home --change-interface=enp1s0
The interface is under control of NetworkManager, setting zone to 'home'.
success
[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=internal --change-interface=enp2s0
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[bitwalk@cnction ~]$

設定したゾーンを確認します。

[bitwalk@cnction ~]$ sudo firewall-cmd --get-active-zones
home
  interfaces: enp1s0
internal
  interfaces: enp2s0
libvirt
  interfaces: virbr0
[bitwalk@cnction ~]$

 CentOS 8 

IP マスカレードの有効化

インターフェイス enp1s0(家庭内 LAN 側)のゾーン home に対して IP マスカレードを有効にします。そのあとで firewall の設定を再読み込みします。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=home --add-masquerade
success
[bitwalk@cnction ~]$ sudo firewall-cmd --reload
success
[bitwalk@cnction ~]$

各ゾーンの設定状況を確認します。

[bitwalk@cnction ~]$ sudo firewall-cmd --list-all --zone=home
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[bitwalk@cnction ~]$ sudo firewall-cmd --list-all --zone=internal
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[bitwalk@cnction ~]$

firewall-config の使用

firewall-config を利用すると、GUI で filrewall の設定ができます。インストールは次のようにします。

[bitwalk@cnction ~]$ sudo dnf install firewall-config
Extra Packages for Enterprise Linux Modular 8 -  16 kB/s | 9.8 kB     00:00    
Extra Packages for Enterprise Linux 8 - x86_64   12 kB/s | 9.7 kB     00:00    
google-chrome                                    15 kB/s | 1.3 kB     00:00    
依存関係が解決しました。
================================================================================
 パッケージ            Arch         バージョン            リポジトリー    サイズ
================================================================================
インストール:
 firewall-config       noarch       0.7.0-5.el8_1.1       AppStream       158 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 158 k
インストール済みのサイズ: 1.1 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
firewall-config-0.7.0-5.el8_1.1.noarch.rpm      1.0 MB/s | 158 kB     00:00    
...
(途中省略)
...
インストール済み:
  firewall-config-0.7.0-5.el8_1.1.noarch                                        

完了しました!
[bitwalk@cnction ~]$ 

firewall-config は以下のように GNOME にアプリ一覧から起動します。アプリ名は「ファイアウォールの設定」になっています。

GNOME のアプリ一覧にある firewall-config(ファイアウォールの設定)

実行例を示しました。さすがに GUI だと設定の変更操作が簡単です。

firewall-config の実行例

動作確認

ゾーン internal にクライアント PC を繋げて動作確認します。

 CentOS 8 

IP アドレス等の設定

ゾーン home 側のネットワークに繋がっている NIC (enp1s0) は、ケーブルテレビのルータ (BCW720J) の DHCP でアドレスが割り当てられますが、この CentOS 8 サーバーは IP アドレスが 192.168.0.31 固定になるように、ルータ側で設定しています。

CentOS 8: enp1s0 の設定 (192.168.0.31)

ゾーン internal 側のネットワークの NIC (enp2s0) は IP アドレス 192.168.2.1 とサブネットマスク 255.255.255.0 のみ設定しました。

CentOS 8: enp2s0 の設定 (192.168.2.1)

ルーティングテーブルの情報を確認すると以下のようになっています。

[bitwalk@cnction ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 enp1s0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 enp1s0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 enp2s0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
[bitwalk@cnction ~]$

 Ubuntu 18.04 

IP アドレス等の設定(クライアント側)

ゾーン internal 側に一台、クライアント PC を接続し、IP アドレス等を設定しました。OS は Ubuntu 18.04 です。IP アドレスに 192.168.2.2、サブネットマスクは 255.255.255.0、デフォルトゲートウェイを 192,168,2,1 としました。このままでは名前解決ができないので、とりあえず、enp1s0 に設定したもの同じ DNS のアドレスを設定しました。

Ubuntu 18.04: ネットワークの設定 (192.168.2.2)

同じようにルーティングテーブルの情報を確認すると以下のようになっています。

(venv) bitwalk@ubuntu-pc:~$ netstat -rn
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インタフェース
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 enp3s0f2
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 enp3s0f2
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 enp3s0f2
(venv) bitwalk@ubuntu-pc:~$ route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         _gateway        0.0.0.0         UG    100    0        0 enp3s0f2
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp3s0f2
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 enp3s0f2
(venv) bitwalk@ubuntu-pc:~$ 

169.254.0.0 はリンクローカルアドレスという領域です。DHCP サーバ(プライベート IP アドレスを割り当てる役目を持ったサーバ)が存在しないネットワーク内で使われる、特別なIPアドレスです。なぜ割り当てられたのか不思議ですが、DHCP が使えないローカルのネットワークで APIPA が有効になるのしょうか。このルートがあっても害はなさそうですので、とりあえず放置します。

これで、インターネットへのアクセスができることを確認できました。ゾーン internal から home へのアクセスも大丈夫そうですが、その逆、home から internal への経路が取れません。ひきつづき調査を続けます。

参考サイト

  1. bitWalk's: ミニ PC を衝動買い [2020-04-21]
  2. CentOS8 実践ガイド[システム管理編] - インプレスブックス

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: