CentOS7でPPPoE接続+ルータ構築

  • 9
    いいね
  • 0
    コメント

ネットワークはよくわかならいけど家にサーバを建てたくなったので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つを行う。

  1. PPPoE設定
  2. LAN側設定
  3. 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 PPPoEip 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_forward1に設定する。

/etc/sysctl.d/10-ipv4.conf
net.ipv4.ip_forward = 1
# sysctl --system
(略)
* Applying /etc/sysctl.d/10-ipv4.conf ...
net.ipv4.ip_forward = 1
(略)

firewalldによるマスカレード

次にfirewall-cmdで適切なzoneを設定する。今回はexternalinternalを使用。

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周りについて追記しました。


  1. 他のルーターで外に繋がるけどCentOSをルーター化したいという状況なので。インターネットを繋ぎにいくインターネットが無いとか言わない(´・ω・`)