Help us understand the problem. What is going on with this article?

CentOS7でPPPoE接続+ルータ構築

More than 3 years have passed since last update.

ネットワークはよくわかならいけど家にサーバを建てたくなったので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をルーター化したいという状況なので。インターネットを繋ぎにいくインターネットが無いとか言わない(´・ω・`) 

ronin_gw
隅をつつきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした