NetworkManagerでpppoe

実は今回のOba-Qサーバーのpppoeは
NetworkManagerでやっています。
以前は設定できても不具合が多かったため
networkに鞍替えしてからNetworkManagerは
葬り去ったものでしたが、最近は良くなったという
情報が入ったためです。
ダメならまた鞍替えしちゃえばイイやと思っていましたが
ちゃ〜んと思い通りに動いてくれているようです。@今のところ

まずはネットワークデバイスを調べます。

# nmcli device
デバイス タイプ 状態 接続
virbr0 bridge 接続済み virbr0
enp2s0 ethernet 接続済み LAN
enp3s1 ethernet 利用不可 —
lo loopback 管理無し —
virbr0-nic tun 管理無し —

           (拙宅環境です)

enp2s0はすでにプライベートIPアドレスが割り振られ
LANに参加しているのでpppoeが利用できるNICは
enp3s1であることが分かります。

とりあえずenp3s1をpppoeに利用して接続してみる

# nmcli connection add type pppoe ifname enp3s1 con-name PPPoE username 接続ID password 接続パスワード mtu 1454 (一行)

 mtuは適時プロバイダ推奨値などを採用してください。
 深くは追求していませんがデバイス名を
 間違ってしまっても、NetworkManagerは勝手に
 使っていないNICを探しだして接続に行くようです。

スクリプトを作成してみる。

# vi pppoe.sh

#!/bin/bash
nmcli connection add type pppoe ifname enp3s1 con-name PPPoE username 接続ID password 接続パスワード mtu 1454 (一行)

# chmod +x pppoe.sh

スクリプトを実行してみる。

# bash pppoe.sh

どちらでも簡単に接続してくれますしCPU負荷や
プロセスなどからカーネルモードで接続していますねぇ♪

接続の状況をみてみる。

pppoe接続状態で再度ネットワークデバイス状況を見ると

# nmcli device
デバイス タイプ 状態 接続
virbr0 bridge 接続済み virbr0
enp2s0 ethernet 接続済み LAN
enp3s1 ethernet 接続済み PPPOE
lo loopback 管理無し —
virbr0-nic tun 管理無し —

enp3s1がPPPOEに利用されていることが分かります。

接続のステータスは?(長いです。。w)

# nmcli connection show PPPoE

connection.id: PPPoE
connection.uuid: fe4ca60d-4036-4ca6-94a9-d318db2624dd
connection.stable-id: —
connection.interface-name: enp3s1
connection.type: pppoe
connection.自動接続: yes
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.timestamp: 1516808038
connection.read-only: no
connection.permissions: —
connection.zone: —
connection.マスター: —
connection.slave-type: —
connection.autoconnect-slaves: -1 (default)
connection.secondaries: —
connection.gateway-ping-timeout: 0
connection.metered: 不明
connection.lldp: -1 (default)
802-3-ethernet.ポート: —
802-3-ethernet.speed: 0
802-3-ethernet.duplex: —
802-3-ethernet.auto-negotiate: no
802-3-ethernet.mac-address: —
802-3-ethernet.cloned-mac-address: —
802-3-ethernet.generate-mac-address-mask:–
802-3-ethernet.mac-address-blacklist: —
802-3-ethernet.mtu: 1454
802-3-ethernet.s390-subchannels: —
802-3-ethernet.s390-nettype: —
802-3-ethernet.s390-options: —
802-3-ethernet.wake-on-lan: 1 (default)
802-3-ethernet.wake-on-lan-password: —
ipv4.method: auto
ipv4.dns: —
ipv4.dns-search: —
ipv4.dns-options: (デフォルト)
ipv4.dns-priority: 0
ipv4.addresses: —
ipv4.gateway: —
ipv4.routes: —
ipv4.route-metric: -1
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: —
ipv4.dhcp-timeout: 0
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: —
ipv4.dhcp-fqdn: —
ipv4.never-default: no
ipv4.may-fail: yes
ipv4.dad-timeout: -1 (default)
ipv6.method: auto
ipv6.dns: —
ipv6.dns-search: —
ipv6.dns-options: (デフォルト)
ipv6.dns-priority: 0
ipv6.addresses: —
ipv6.gateway: —
ipv6.routes: —
ipv6.route-metric: -1
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
ipv6.may-fail: yes
ipv6.ip6-privacy: -1 (不明)
ipv6.addr-gen-mode: stable-privacy
ipv6.dhcp-send-hostname: yes
ipv6.dhcp-hostname: —
ipv6.token: —
pppoe.service: —
pppoe.username: ****@***.****.jp
pppoe.password:
pppoe.password-flags: 0 (なし)
proxy.method: none
proxy.browser-only: no
proxy.pac-url: —
proxy.pac-script: —
GENERAL.名前: PPPoE
GENERAL.UUID: fe4ca60d-4036-4ca6-94a9-d318db2624dd
GENERAL.デバイス: enp3s1
GENERAL.状態: アクティベート済み
GENERAL.デフォルト: はい
GENERAL.デフォルト6: いいえ
GENERAL.VPN: いいえ
GENERAL.ゾーン: —
GENERAL.DBUS パス: /org/freedesktop/NetworkManager/ActiveConnection/18
GENERAL.CON パス: /org/freedesktop/NetworkManager/Settings/13
GENERAL.スペックオブジェクト: —
GENERAL.マスターパス: —
IP4.アドレス[1]: **.3.108.180/**
IP4.ゲートウェイ: ***.139.100.188
IP4.DNS[1]: ***.139.230.168
IP4.DNS[2]: ***.139.21.197
IP6.ゲートウェイ: —

長いのでもうちょっと簡易的に見るには?

# nmcli device show enp3s1
GENERAL.デバイス: enp3s1
GENERAL.タイプ: ethernet
GENERAL.ハードウェアアドレス: 00:10:4B:93:A5:5B
GENERAL.MTU: 1500
GENERAL.状態: 100 (接続済み)
GENERAL.接続: PPPoE
GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/18
WIRED-PROPERTIES.キャリア: オン
IP4.アドレス[1]: **.3.108.180/**
IP4.ゲートウェイ: ***.139.100.188
IP4.DNS[1]: ***.139.230.168
IP4.DNS[2]: ***.139.21.197

 おっとDNSサーバーがプロバイダのまんまになっていますね。。。
 自前のやつに変更しときましょ。
ま、ちゃんと接続されていることが分かります。

しかし・・・
connection.自動接続: yesになっているのですが
再起動時に接続を失敗したことがあります。
1度だけでなく2度あったので3度めもあるかも。。。
このままでは将来起きた場合にはコマンドを叩くか
スクリプトを実行しなくてはいけませんので、
保険の意味でシステム起動時に自動実行するように
他の仕掛けをします。

候補としてはautostartやcrontabを使うなど幾つかありますが
今回はsystemdの登録という本格派スタイルでやりました。(笑
CentOS6までは/etc/rc.d/rc.localに書き込むことで
実現していましたが、CentOS7で書き込もうとすると

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run ‘chmod +x /etc/rc.d/rc.local’ to ensure
# that this script will be executed during boot.

と注意書きがあり、systemdに自分でサービスを作って
登録しておく方法を強くオススメされてしまうという訳です。
ならば先に作ったスクリプトをsystemdの登録して自動実行
させてみようじゃありませんか。w

# vi /etc/systemd/system/pppoe.service

[Unit]
Type=simple
Description=pppoe start shell
After=

[Service]
ExecStart=/bin/bash /root/pppoe.sh

[Install]
WantedBy=multi-user.target

pppoe.serviceのpppoeの部分はsystemctlコマンドで
制御するときに使うもので任意名ですが、覚えていやすい
名前にしたほうが無難です。
After= は先に起動させておきたいサービスが
あれば指定しておきますが今回は無記入。
/root/pppoe.sh は違うところに置いたなら適時
パスを変更してください。
Type=simple は[Service]のところに書く方も
いらっしゃいますのでどこに書いても良い?

# systemctl enable pppoe.service

Created symlink from /etc/systemd/system・・
というメーッセージが出れば成功です。
これで起動時の接続に失敗することはなくなりました。

勿論

# systemctl start pppoe.service
# systemctl stop pppoe.service
# systemctl restart pppoe.service
# systemctl status pppoe.service

など一連の制御が可能になります。

プロバイダへの接続がすごく早くなった
と思うのは気のせいでしょうか。。。
ちなみにGUIでも設定できるのでしょうがサーバーの
モニターを繋いでXを起動させるほうが面倒なので
試すつもりはありません。

HOME

おすすめ