LoginSignup
17
17

More than 5 years have passed since last update.

CentOS7でPPPoE接続+ルータ構築

Last updated at Posted at 2016-01-24

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

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17