ネットワークはよくわかならいけど家にサーバを建てたくなったのでNetworkManagerとFirewallDでどうにかこうにかやったことのメモ
#環境
NICが2つあるマシンで、WAN側でPPPoE接続しつつ、LAN側もWANに接続できるようにしたい。
~{Modem}―――[NIC1]=[NIC2]―――(LAN)
名前 | 割当 | |
---|---|---|
NIC1 | enp0s25 | WAN, PPPoE接続 |
NIC2 | enp3s1 | LAN(192.168.0.1/24) |
今回はCentOS7 minimalインストール環境で、NetworkManagerとFirewallDを使い、次の3つを行う。
- PPPoE設定
- LAN側設定
- IPマスカレード
PPPoEでつなぐ
準備
rp-pppoe
がいるようなのでインストール1
# yum install rp-pppoe
NetworkManagerが入っていれば、nmcli
コマンドが使える。
nmcli connection
でネットワーク設定の一覧を表示(コマンドオプションは一意なら省略可)。
# nmcli c
名前 UUID タイプ デバイス
enp3s1 略 802-3-ethernet --
enp0s25 略 802-3-ethernet --
接続設定の追加
ここにPPPoE接続設定を追加する。
# nmcli connection add type pppoe ifname enp0s25 con-name PPPoE username <uname> password <pass> mtu <mtu>
設定にPPPoEという名前で設定が追加される。動いてなければnmcli connection up PPPoE
で有効化。
# nmcli c
名前 UUID タイプ デバイス
PPPoE 略 pppoe --
enp3s1 略 802-3-ethernet --
enp0s25 略 802-3-ethernet --
# nmcli c up PPPoE
# nmcli c
名前 UUID タイプ デバイス
PPPoE 略 pppoe enp0s25
enp3s1 略 802-3-ethernet --
enp0s25 略 802-3-ethernet --
ppp0 略 generic --
nmcli connection show PPPoE
やip a
で確認。
MTU/MRUの設定
PPPoEサービスの場合、MTUを1454だとか1436などに設定する必要があるが、デフォルトでは1500になっているため適切な値(サービスにより異なる)に修正する。
# nmcli connection modify PPPoE ppp.mtu 1454
# nmcli connection modify PPPoE ppp.mru 1454
LAN側設定
LAN側のNICにnmcli connection modify
を使ってLAN用のアドレスを設定する。
# nmcli c m enp3s1 ipv4.method manual
# nmcli c m enp3s1 ipv4.addresses 192.168.0.1/24
# nmcli c m enp3s1 ipv4.gateway 0.0.0.0
また、LAN側がデフォルトゲートウェイにならないようにしておく。
# nmcli c m enp3s1 ipv4.never-default yes
IPマスカレード設定
IPv4フォワーディングを有効にする
firewalldの設定に先立ち、net.ipv4.ip_forward
を1
に設定する。
net.ipv4.ip_forward = 1
# sysctl --system
(略)
* Applying /etc/sysctl.d/10-ipv4.conf ...
net.ipv4.ip_forward = 1
(略)
firewalldによるマスカレード
次にfirewall-cmd
で適切なzoneを設定する。今回はexternal
とinternal
を使用。
firewalldを動かす
# systemctl start firewalld.service
external
は元からmasqueradeが有効になっている。
# firewall-cmd --list-all --zone=external
external
interfaces:
sources:
services: ssh
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
ppp0をexternal
に、enp3s1をinternal
に設定。
# firewall-cmd --zone=external --change-interface=ppp0
# firewall-cmd --zone=internal --change-interface=enp3s1
--permanent
オプションで設定を永続化する。
# firewall-cmd --permanent --zone=external --change-interface=ppp0
# firewall-cmd --permanent --zone=internal --change-interface=enp3s1
PMTUDブラックホール対策
さてこのままだとLAN側に繋いだクライアントからではうまく通信できない場合がある。今のままではクライアント側で適切なMTUが設定されないままになっているからだ。これを回避するために、クライアントごとにMTUを設定する手もあるが、ここではルーターから適切なMSSサイズを通知するようにして回避しよう。
# firewall-cmd --direct --add-passthrough ipv4 -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu --permanent
--permanent
による永続化も忘れずに。
あとはLAN側にDHCPを提供したりすればだいたいルーターとして使える。
その他
PPPoEの設定でMTUを設定してもppp0に反映されないのはいいのだろうか?
ともかくMTUが適切かは要確認
※MTU周りについて追記しました。
-
他のルーターで外に繋がるけどCentOSをルーター化したいという状況なので。インターネットを繋ぎにいくインターネットが無いとか言わない(´・ω・`) ↩