【Linux】PPPoEサーバの構築

Linux

はじめに

時に、PPPoEできるサーバが欲しい時があります。PPPoEをするルータを納品するとき、とりあえず設定したPPPoEの設定が正しいかだけでも分かると、やはり安心できます。そんなときに試した際の記憶です。

注意

個人的にRedHatに触っていた期間があるので、検証ではAlmaLinuxを使うことが多いです。しかし、AlmaLinuxで構築しようとしたところ、途中で挫折しました。どうも、pppoeができるパッケージが配布されなくなったかなんかで、とにかく「dnfを叩いてconfを編集して速攻サービス起動!!」というお手軽なルートでは出来ず。

ということで、Ubuntuで構築しました。バージョンは22.04 LTS。
※半分備忘録みたいなものなので、説明は雑です。お許しを。

構築

pppoeをインストールします。

apt-get install pppoe

/etc/ppp内のファイルを確認。
chap-secretsとoptionsを編集します。

root@pppoe02:/etc/ppp# ll
total 92
drwxr-xr-x  8 root dip   4096 Mar  4 15:15 ./
drwxr-xr-x 98 root root  4096 Mar  4 15:11 ../
-rw-------  1 root root    80 Mar  4 15:11 chap-secrets
-rwxr-xr-x  1 root root  1757 Feb 23  2022 ip-down*
drwxr-xr-x  2 root root  4096 Mar  4 15:11 ip-down.d/
-rwxr-xr-x  1 root root  1807 Feb 23  2022 ip-pre-up*
drwxr-xr-x  2 root root  4096 Feb 24  2022 ip-pre-up.d/
-rwxr-xr-x  1 root root  1898 Feb 23  2022 ip-up*
drwxr-xr-x  2 root root  4096 Mar  4 15:11 ip-up.d/
-rwxr-xr-x  1 root root   834 Feb 23  2022 ipv6-down*
drwxr-xr-x  2 root root  4096 Feb 24  2022 ipv6-down.d/
-rwxr-xr-x  1 root root   974 Feb 23  2022 ipv6-up*
drwxr-xr-x  2 root root  4096 Feb 24  2022 ipv6-up.d/
-rw-r--r--  1 root root 13207 Mar  4 15:15 options
-rw-r--r--  1 root root 13209 Feb 23  2022 options.org
-rw-------  1 root root  1628 Mar  4 15:11 pap-secrets
drwxr-s---  2 root dip   4096 Mar  4 15:11 peers/

optionsを編集します。編集後に有効されている値を示しておきます。

root@pppoe02:/etc/ppp# cat options | grep -v -e "^#" -e "^\s*$"
asyncmap 0
auth
crtscts
lock
hide-password
modem
+pap
+chap
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
noipx
require-chap

chap-secretsを編集します。のちのルータ設定に合わせます。

root@pppoe02:/etc/ppp# tail chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
pppoeuser01 * "password" 1.2.3.4

PPPoEがルータのようにルーティングできるようにします。
長く使う場合は、/etc/sysctl.confを編集して永続化したほうがいいです。

root@pppoe02:/etc/ppp# echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
1
root@pppoe02:/etc/ppp#
root@pppoe02:/etc/ppp# cat /proc/sys/net/ipv4/ip_forward
1

ルータ側の設定を簡単に載せます。Ciscoの891fjで検証してます。

RT01#sh run | section Dialer1
interface Dialer1
 ip address negotiated
 ip virtual-reassembly in
 encapsulation ppp
 ip tcp adjust-mss 1314
 dialer pool 1
 ppp authentication chap callin
 ppp chap hostname pppoeuser01
 ppp chap password 7 13151601181B0B382F
 no cdp enable

RT01#sh run | section Loopback
interface Loopback1
 ip address 1.2.3.4 255.255.255.248

 RT01#sh run | section GigabitEthernet8
interface GigabitEthernet8
 no ip address
 duplex full
 speed 1000
 pppoe enable group global
 pppoe-client dial-pool-number 1

あとはルータの1.2.3.4を付与するようにサーバ起動コマンドを実行。

pppoe-server -I ens33 -L 1.2.3.3 -R 1.2.3.4 -N 10 -S myPPPoE -O /etc/ppp/options

うまくいくと、ルータ側でPPPoEが成功していることを確認できます。

RT01#sh ppp all
Interface/ID OPEN+ Nego* Fail-     Stage    Peer Address    Peer Name
------------ --------------------- -------- --------------- --------------------
Vi2          LCP+ IPCP+            LocalT   1.2.3.3         pppoe02

あとはおまけ。サーバ側のtcpdumpコマンドを記載しておきます。

tcpdump -i ens33 -n -vvv ether proto 0x8863

PADI→PADO→PADR→PADSの順にログが出力されていますが、うまくいかないときに、どこで出力が止まるかが分かると、トラシュに役たちます。
細かいことはChatCPTに聞くと答えてくれますので、是非ハマったときは聞いてみてください。

root@pppoe02:/etc/ppp# tcpdump -i ens33 -n -vvv ether proto 0x8863
tcpdump: listening on ens33, link-type EN10MB (Ethernet), snapshot length 262144 bytes
08:02:25.929483 PPPoE PADI [Service-Name] [Host-Uniq 0x5000000900000E0C]
08:02:25.929822 PPPoE PADO [AC-Name "pppoe02"] [Service-Name "myPPPoE"] [AC-Cookie 0xF8044C22A5751D2324882D105EAC894414090000] [Host-Uniq 0x5000000900000E0C]
08:02:25.930744 PPPoE PADO [AC-Name "pppoe02"] [Service-Name "myPPPoE"] [AC-Cookie 0xB4B91E304CF8E71BBA8B1D18105333CEFB080000] [Host-Uniq 0x5000000900000E0C]
08:02:25.931398 PPPoE PADO [AC-Name "pppoe02"] [Service-Name "myPPPoE"] [AC-Cookie 0xBF46FA13AC20DBA0F2A96393358BF0EDB8080000] [Host-Uniq 0x5000000900000E0C]
08:02:27.977357 PPPoE PADR [AC-Name "pppoe02"] [AC-Cookie 0xF8044C22A5751D2324882D105EAC894414090000] [Host-Uniq 0x5000000900000E0C] [Service-Name]
08:02:27.980049 PPPoE PADS [ses 0x3] [Service-Name "myPPPoE"] [Host-Uniq 0x5000000900000E0C]

以上。