環境
WSL で Fedora を使う を参照して入れた wsl2 上の Fedra に pppoe サーバを入れて、pppoe 設定の練習環境を作る。
ちょっと修正
バージョンなど
Microsoft Windows [Version 10.0.19042.572]
Fedora Remix 32 on WSL2 (Fedora 32)
CISCO 1921 CISCO1921/K9 c1900-universalk9-mz.SPA.156-3.M.bin (ipbase & security)
Configuration register is 0x3962 だったので config-register 0x2102 を実施。
# uname -a
Linux HINAKO 4.19.84-microsoft-standard #1 SMP Wed Nov 13 11:44:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/os-release
...
ID_LIKE=fedora
VERSION_ID=32
...
# /mnt/c/Windows/System32/wsl.exe -l -v
NAME STATE VERSION
* fedoraremix Running 2
Debian Stopped 2
# /mnt/c/Windows/System32/cmd.exe
'\\wsl$\fedoraremix\root'
上記の現在のディレクトリで CMD.EXE を開始しました。
UNC パスはサポートされません。Windows ディレクトリを既定で使用します。
Microsoft Windows [Version 10.0.19042.572]
(c) 2020 Microsoft Corporation. All rights reserved.
C:\Windows>
Windows の繋がっている自宅内のネットワーク 192.168.0.0/24
Cisco 1921 (クライアント) のローカル側のネットワーク 172.16.0.1/24
とする。pppoe の両端は IP アドレスを振らない (unnumberd) とする。
pppoe サーバーのインストール
dnf search pppoe
で探すと rp-pppoe というのがあるようなのでそれを入れる。
[root@HINAKO ~]# dnf install -y rp-pppoe
pppoe サーバの設定をする
# PPP options for the PPPoE server
# LIC: GPL
# pap は平文でユーザ名、パスワードを流すので chap を使う
# require-pap
refuse-pap
require-chap
# refuse-chap
# chap-interval 5
# chap-max-challenge 10
# login
lcp-echo-interval 60
lcp-echo-failure 2
# FLET's 回線だと MRU, MTU が 1454 なので偽装する
# PPPoE標準は 1492
mru 1454
mtu 1454
## パケット圧縮 (8~15)
# deflate 15,15
# bsdcomp 15,15
## TCP/IP ヘッダ圧縮 (2~16)
# vj-max-slots 16
## Predictor-1 で送出フレームを圧縮する
# predictor1
# 圧縮しない
# 圧縮しない
nopcomp
nodeflate
nobsdcomp
novj
novjccomp
nopredictor1
# ipcp クライアントが、local や remote の IP を指定してきた場合、それを受け入れる
ipcp-accept-local
ipcp-accept-remote
# ipcp ネゴシエーションした後、相手のアドレスを defaultroute に追加しない
nodefaultroute
# クライアントに渡す dns のアドレス
ms-dns 1.1.1.1
ms-dns 8.8.4.4
usepeerdns
# クライアントが明示的に IP アドレスを指定していない場合、IPCP で IP アドレスを渡す
noipdefault
proxyarp
# IPXCP, IPX プロトコルは通さない
noipx
debug
chap のパスワードファイルを作成
テスト用のユーザとパスワードを設定。IP アドレスは * にして pppoe-server に自動生成してもらう。
# Secrets for authentication using CHAP
# client server secret IP addresses
user01@test.home * pass1 *
user02@test.home * pass2 *
user03@test.home * pass3 *
user04@test.home * pass4 *
CISCO ルータ側の Config を作る (クライアント)
ちょいちょい省略しながら
hostname HomeRT
interface GigabitEthernet0/0
no ip address
pppoe enable group global
pppoe-client dial-pool-number 1
!
interface GigabitEthernet0/1
description Home LAN
ip address 172.16.0.1 255.255.255.0
ip tcp adjust-mss 1414
!
interface Dialer1
ip address negotiated
ip mtu 1454
encapsulation ppp
dialer pool 1
dialer-group 1
ppp authentication chap callin
ppp chap hostname user01@test.home
ppp chap password 0 pass1
!
ip route 0.0.0.0 0.0.0.0 Dialer1 permanent
!
dialer-list 1 protocol ip permit
!
...snip
end
Windows のインターフェイスと Fedora の eth0 を繋ぐ
Windows 10 のスタートメニューを右クリックし「ネットワーク接続(W)」を開く
インターネットに出られる Windows のインターフェイス「イーサネット 3」と、WSL のインターフェイス 「vErhernet (WEL)」 を選択しブリッジ接続する。
「ネットワークブリッジ」インターフェイスができるので、これをダブルクリックして IP アドレスを振る。
※何故か DHCP で IP を取得することができないので、手動で割り当てが必要。
設定が完了すると、最初に「イーサネット 3」の状態欄に表示されていた「COOKING_F」が「ネットワークブリッジ」に表示される。
Fedora に DHCP でアドレスを貰う
この状態では、WSL 内の Fedora からインターネットに繋ぐことができなくなるので DHCP で IP アドレスを振ってやる。
ifcfg ファイルを編集
Fedora のインターフェイスを dhcp でアドレスを貰うために /etc/sysconfig/network-scripts/ifcfg-eth0 のファイルを書き換えて dhclient を実行する。
書き替えるファイルの内容 [9.2. インターフェース設定ファイル] (https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s1-networkscripts-interfaces) 等を参照。
TYPE="Ethernet"
DEVICE="eth0"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
ONBOOT="yes"
USERCTL="yes"
ダブルクウォートは要らないのですが、色が変わるので付けてみました。
アドレスを取得
上記内容にファイルを書き換えてから DHCP でアドレスを取得する
[root@HINAKO ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
[root@HINAKO ~]# ip -4 a show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.22.169.198/20 brd 172.22.175.255 scope global eth0
valid_lft forever preferred_lft forever
[root@HINAKO ~]# dhclient eth0
[root@HINAKO ~]# ip -4 a show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.22.169.198/20 brd 172.22.175.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.0.28/24 brd 192.168.0.255 scope global dynamic eth0
valid_lft 86458sec preferred_lft 86458sec
[root@HINAKO ~]#
eth0 に inet 192.168.0.28/24 が割り当てられた。
pppoe-server を起動 (サーバ側)
[root@HINAKO ~]# pppoe-server -I eth0:1 -S 'Fedora"
CISCO の状態を確認 (クライアント側)
HomeRT#show pppoe session
1 client session
Uniq ID PPPoE RemMAC Port VT VA State
SID LocMAC VA-st Type
N/A 1 0015.5de5.bc3c Gi0/0 Di1 N/A SHUTDOWN
002c.c8a8.95a0
HomeRT#show log
...snip...
*Oct 17 06:11:51.079: %DIALER-6-BIND: Interface Vi2 bound to profile Di1
*Oct 17 06:11:51.083: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to up
*Oct 17 06:11:51.083: %DIALER-6-UNBIND: Interface Vi2 unbound from profile Di1
*Oct 17 06:11:51.087: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to down
*Oct 17 06:12:13.351: %DIALER-6-BIND: Interface Vi2 bound to profile Di1
*Oct 17 06:12:13.355: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to up
*Oct 17 06:12:13.355: %DIALER-6-UNBIND: Interface Vi2 unbound from profile Di1
*Oct 17 06:12:13.359: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to down
*Oct 17 06:12:35.659: %DIALER-6-BIND: Interface Vi2 bound to profile Di1
*Oct 17 06:12:35.663: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to up
*Oct 17 06:12:35.663: %DIALER-6-UNBIND: Interface Vi2 unbound from profile Di1
*Oct 17 06:12:35.667: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to down
*Oct 17 06:12:57.931: %DIALER-6-BIND: Interface Vi2 bound to profile Di1
*Oct 17 06:12:57.935: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to up
*Oct 17 06:12:57.935: %DIALER-6-UNBIND: Interface Vi2 unbound from profile Di1
*Oct 17 06:12:57.939: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to down
mac アドレスが表示されているのに SHUTDOWN 表示で、ログには up/down 表示が出続けている。繋がっていない雰囲気。
Fedora の状況を確認 (サーバ側)
[root@HINAKO ~]# ps ax | grep pppoe
612 ? S 0:00 pppoe-server -I eth0:1 -S Fedora
708 pts/2 S+ 0:00 grep pppoe
プロセスは落ちてないけども、syslogd がなく /var/log にはログが出力されておらず dmesg にも記録なし。何が起こっているか分からないので syslog を取れるようにする。
Fedora に syslog を設定する
dnf search syslog
とすると使えるのは rsyslog
と syslog-ng
の二つ。syslogd が一番 簡単で良いんだけどなぁ。と思いながらも、どれを選んでも機能に問題ないだろうし、適当に syslog-ng
にしてみる。
Fedora へ syslog-ng をインストール
[root@HINAKO log]# dnf install syslog-ng
設定ファイルを編集
ppp のログを /var/log/ppp/ppp.log に吐くことにする。
filter f_default は、ppp, pppoe のログを吐かないように修正し、下の 3行を追加。
filter f_default { not (program("pppd") or program("pppoe-server")) and \
level(info..emerg) and \
not (facility(mail) or facility(authpriv) or facility(cron)); };
destination d_ppp { file("/var/log/ppp/ppp.log"); };
filter f_ppp { (program("pppd") or program("pppoe-server")) and level(debug..emerg) };
log { source(s_sys); filter(f_ppp); destination(d_ppp); };
syslog-ng を起動
syslog-ng -s
で設定ファイルに間違いがないことを確認して syslog-ng
を起動。 (WSL2 では systemctl は使えない模様)
[root@HINAKO log]# syslog-ng -s
[root@HINAKO log]# syslog-ng
再び Fedora の状況を確認 (サーバ側)
[root@HINAKO log]# cat /var/log/ppp/ppp.log
...
Oct 17 06:22:11 HINAKO pppoe-server[932]: Session 61 created for client 00:2c:c8:a8:95:a0 (10.67.15.61) on eth0:1 using Service-Name ''
Oct 17 06:22:11 HINAKO pppd[932]: Warning: couldn't open ppp database /var/run/ppp/pppd2.tdb
Oct 17 06:22:11 HINAKO pppd[932]: pppd 2.4.7 started by root, uid 0
Oct 17 06:22:11 HINAKO pppd[934]: Fatal signal 11
Oct 17 06:22:11 HINAKO pppd[934]: Exit.
Oct 17 06:22:11 HINAKO pppd[932]: Couldn't get channel number: Input/output error
Oct 17 06:22:11 HINAKO pppd[932]: Script /usr/sbin/pppoe -n -I eth0:1 -e 61:00:2c:c8:a8:95:a0 -S '' finished (pid 934), status = 0x7f
Oct 17 06:22:11 HINAKO pppd[932]: Exit.
Oct 17 06:22:11 HINAKO pppoe-server[612]: Session 61 closed for client 00:2c:c8:a8:95:a0 (10.67.15.61) on eth0:1
Oct 17 06:22:11 HINAKO pppoe-server[612]: Sent PADT
Oct 17 06:22:11 HINAKO pppoe-server[612]: PADT for session 61 received from 00:2C:C8:A8:95:A0; should be from 00:00:00:00:00:00
Oct 17 06:22:33 HINAKO pppoe-server[936]: Session 62 created for client 00:2c:c8:a8:95:a0 (10.67.15.62) on eth0:1 using Service-Name ''
Oct 17 06:22:33 HINAKO pppd[936]: Warning: couldn't open ppp database /var/run/ppp/pppd2.tdb
Oct 17 06:22:33 HINAKO pppd[936]: pppd 2.4.7 started by root, uid 0
Oct 17 06:22:33 HINAKO pppd[938]: Fatal signal 11
Oct 17 06:22:33 HINAKO pppd[938]: Exit.
Oct 17 06:22:33 HINAKO pppd[936]: Couldn't get channel number: Input/output error
Oct 17 06:22:33 HINAKO pppd[936]: Script /usr/sbin/pppoe -n -I eth0:1 -e 62:00:2c:c8:a8:95:a0 -S '' finished (pid 938), status = 0x7f
Oct 17 06:22:33 HINAKO pppd[936]: Exit.
Oct 17 06:22:33 HINAKO pppoe-server[612]: Session 62 closed for client 00:2c:c8:a8:95:a0 (10.67.15.62) on eth0:1
Oct 17 06:22:33 HINAKO pppoe-server[612]: Sent PADT
Oct 17 06:22:33 HINAKO pppoe-server[612]: PADT for session 62 received from 00:2C:C8:A8:95:A0; should be from 00:00:00:00:00:00
pppd が Signal 11 で落ちてますねぇ。SEGV ですかぁ。もう枯れてる技術だと思ったんですが、そうでもないんでしょうか。
pppd を自前でビルドする
Signal 11 というと、その昔 gcc4 の頃に最適化が腐ってて -O2 でコンパイルすると Signal 11 が頻発することがありました。そんな過去の記憶から、最適化を外してコンパイルしてみます。
SRPM をダウンロード
ソースファイルはどこにあるのかな?と思いましたが。よく考えると dnf は rpm ですから SRPM を拾ってきたらいいのか!と気づき実行。iij さんの ftp サーバをうろうろしてたら見つけました。これですね。ダウンロード!
[root@HINAKO ~]# curl -O http://ftp.iij.ad.jp/pub/linux/Fedora/fedora/linux/updates/31/Everything/SRPMS/Packages/p/ppp-2.4.7-35.fc31.src.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:11 --:--:-- 0
curl: (6) Could not resolve host: ftp.iij.ad.jp
[root@HINAKO ~]# ip route show 2020-10-18 5:21:21
default via 192.168.0.254 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.30
[root@HINAKO ~]# ping 192.168.0.254 2020-10-18 5:22:04
PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.
From 192.168.0.30 icmp_seq=1 Destination Host Unreachable
From 192.168.0.30 icmp_seq=2 Destination Host Unreachable
From 192.168.0.30 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.0.254 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4190ms
pipe 4
おや?どうやら Windows で組んだブリッジがおかしくなったようです。まぁ、今は関係ないので、Wi-Fi で繋いで Windows からダウンロード、コピーします。(ここで Wi-Fi をブリッジも繋げるとネットに繋がらなくなります。デバイスマネージャで「ハードウェア更新のスキャン」とかするとデバイスマネージャの応答が無くなります。えぇ、Windows のブリッジはバグってます。使えません。)
[root@HINAKO ~]# mv ~jp_yen/winhome/Downloads/ppp-2.4.7-35.fc31.src.rpm .
[root@HINAKO ~]# ls -l ppp-2.4.7-35.fc31.src.rpm
-rwxr--r-- 1 jp_yen jp_yen 789162 Oct 18 05:26 ppp-2.4.7-35.fc31.src.rpm
取得完了。
ビルド!...の前に
よしコンパイルしてやるぞ!
[root@HINAKO ~]# rpmbuild --rebuild ppp-2.4.7-35.fc31.src.rpm
Installing ppp-2.4.7-35.fc31.src.rpm
setting SOURCE_DATE_EPOCH=1586217600
error: Failed build dependencies:
glib2-devel is needed by ppp-2.4.7-35.fc32.x86_64
libpcap-devel is needed by ppp-2.4.7-35.fc32.x86_64
systemd-devel is needed by ppp-2.4.7-35.fc32.x86_64
[root@HINAKO ~]# dnf install glib2-devel libpcap-devel systemd-devel
と思ったら、色々足りませんと言ってきやがります。まとめてインストールしてやんよ...あ、Fedora からネットに繋がらなくなってた。再起動するか。
気を取り直して、再起動後ブリッジを設定、dhcp でアドレスを取得。からの dnf で必要なヘッダなどをインストール。
[root@HINAKO ~]# dnf install glib2-devel libpcap-devel systemd-devel 2020-10-18 7:47:39
Last metadata expiration check: 0:02:01 ago on Sun 18 Oct 2020 07:46:13 AM JST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
glib2-devel x86_64 2.64.6-1.fc32 updates 460 k
libpcap-devel x86_64 14:1.9.1-3.fc32 fedora 136 k
systemd-devel x86_64 245.8-2.fc32 updates 362 k
Installing dependencies:
libblkid-devel x86_64 2.35.2-1.fc32 updates 16 k
libffi-devel x86_64 3.1-24.fc32 fedora 24 k
libmount-devel x86_64 2.35.2-1.fc32 updates 18 k
libselinux-devel x86_64 3.0-5.fc32 updates 115 k
libsepol-devel x86_64 3.0-4.fc32 updates 40 k
pcre2-devel x86_64 10.35-7.fc32 updates 473 k
pcre2-utf32 x86_64 10.35-7.fc32 updates 199 k
Transaction Summary
========================================================================================================================
Install 10 Packages
Total download size: 1.8 M
Installed size: 6.2 M
Is this ok [y/N]: y
なんか、色々入れるか?と聞いてきたので「おーよ」。と答えて SRPM のビルドへ。
改めてビルド!
[root@HINAKO ~]# rpmbuild --rebuild ppp-2.4.7-35.fc31.src.rpm
...
gcc -Wall -O2 -g -pipe -Wall -Werror=format-security ...
あ、-O2 でコンパイルしてる...調べてみると、/etc/rpmrc や ~/.rpmrc でコンパイルオプションが指定できるらしい。
[root@HINAKO ~]# echo optflags: x86_64 -O0 -g > ~/.rpmrc
[root@HINAKO ~]# cat ~/.rpmrc
optflags: x86_64 -O0 -g
SRPM のパッチファイルを見てみると -O となっているものも -O2 となっているものも ${RPM_OPT_FLAGS}
に置換して、まとめて ${RPM_OPT_FLAGS}=-O2 -g
とされてる。-O の所はパッチが当たらないようにするだけで治るかも。
今回は上記の変更で ${RPM_OPT_FLAGS}=-O0 -g
としておく。
[root@HINAKO ~]# rpmbuild --rebuild ppp-2.4.7-35.fc31.src.rpm
...
gcc -Wall -O0 -g -pipe -Wall -Werror=format-security ...
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/ppp-2.4.7-35.fc32.x86_64
Wrote: /root/rpmbuild/RPMS/x86_64/network-scripts-ppp-2.4.7-35.fc32.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ppp-devel-2.4.7-35.fc32.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ppp-debuginfo-2.4.7-35.fc32.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ppp-2.4.7-35.fc32.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/ppp-debugsource-2.4.7-35.fc32.x86_64.rpm
...
上手くいった。なので、出来た rpm で再インストールする。
自前でビルドした pppd をインストール
[root@HINAKO ~]# ls -l `which pppd`
-rwxr-xr-x 1 root root 402528 Apr 7 2020 /usr/sbin/pppd*
[root@HINAKO ~]# dnf reinstall rpmbuild/RPMS/x86_64/ppp-2.4.7-35.fc32.x86_64.rpm
Last metadata expiration check: 0:48:03 ago on Sun 18 Oct 2020 07:46:13 AM JST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Reinstalling:
ppp x86_64 2.4.7-35.fc32 @commandline 357 k
Transaction Summary
========================================================================================================================
Total size: 357 k
Installed size: 1.1 M
Is this ok [y/N]: y
...snip
Reinstalled:
ppp-2.4.7-35.fc32.x86_64
Complete!
[root@HINAKO ~]# ls -l `which pppd`
-rwxr-xr-x 1 root root 444584 Oct 18 08:28 /usr/sbin/pppd*
[root@HINAKO ~]#
はい、再インストールできました。
再度、接続試験
では、Fedora で pppoe を立ち上げて Cisco1921 から接続してもらいましょう。
[root@HINAKO ~]# pppoe-server -I eth0:1 -S 'Fedora'
Cisco の電源を入れてインターフェイスを up します。
HomeRT#conf t
Enter configuration commands, one per line. End with CNTL/Z.
HomeRT(config)#int gi0/0
HomeRT(config-if)#no shut
HomeRT(config-if)#end
HomeRT#
*Oct 18 08:53:16.819: %SYS-5-CONFIG_I: Configured from console by console
*Oct 18 08:53:17.667: %LINK-3-UPDOWN: Interface GigabitEthernet0/0, changed state to down
*Oct 18 08:53:22.231: %LINK-3-UPDOWN: Interface GigabitEthernet0/0, changed state to up
*Oct 18 08:53:23.231: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to up
*Oct 18 08:53:47.083: %DIALER-6-BIND: Interface Vi2 bound to profile Di1
*Oct 18 08:53:47.087: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to up
*Oct 18 08:53:47.135: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access2, changed state to up
...
HomeRT#show pppoe session
1 client session
Uniq ID PPPoE RemMAC Port VT VA State
SID LocMAC VA-st Type
N/A 1 0015.5dd1.4250 Gi0/0 Di1 Vi2 UP
002c.c8a8.95a0 UP
HomeRT#sho ip int br
Interface IP-Address OK? Method Status Protocol
Embedded-Service-Engine0/0 unassigned YES unset administratively down down
GigabitEthernet0/0 unassigned YES unset up up
GigabitEthernet0/1 172.16.0.1 YES NVRAM administratively down down
Dialer1 10.67.15.1 YES IPCP up up
Virtual-Access1 unassigned YES unset up up
Virtual-Access2 unassigned YES unset up up
HomeRT#show ip route
...snip
Gateway of last resort is 0.0.0.0 to network 0.0.0.0
S* 0.0.0.0/0 is directly connected, Dialer1
10.0.0.0/32 is subnetted, 2 subnets
C 10.0.0.1 is directly connected, Dialer1
C 10.67.15.1 is directly connected, Dialer1
HomeRT#ping 10.0.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
上がりました!pppoe セッションが見えて、Dialer1 のインターフェイスに IP アドレスが割りあてられ...(略)
NAT してないし、Fedora からの帰りのルートを設定していないのでネットワークとしてはまだですが、繋がりました。
Oct 18 08:43:40 HINAKO pppoe-server[4917]: Session 1 created for client 00:2c:c8:a8:95:a0 (10.67.15.1) on eth0:1 using Service-Name ''
Oct 18 08:43:40 HINAKO pppd[4917]: pppd 2.4.7 started by root, uid 0
Oct 18 08:43:40 HINAKO pppd[4917]: using channel 1
Oct 18 08:43:40 HINAKO pppd[4917]: Using interface ppp0
Oct 18 08:43:40 HINAKO pppd[4917]: Connect: ppp0 <--> /dev/pts/4
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [LCP ConfReq id=0x1 <magic 0x2ccb8a59>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0xdcde1729>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [LCP ConfAck id=0x1 <magic 0x2ccb8a59>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [LCP ConfNak id=0x1 <mru 1500>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [LCP ConfReq id=0x2 <auth chap MD5> <magic 0xdcde1729>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [LCP ConfAck id=0x2 <auth chap MD5> <magic 0xdcde1729>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [LCP EchoReq id=0x0 magic=0xdcde1729]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [CHAP Challenge id=0xc4 <223a642dcac5577c49028136db5a3ec5f9>, name = "HINAKO"]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [LCP EchoRep id=0x0 magic=0x2ccb8a59]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [CHAP Response id=0xc4 <63692af6202e36f55d1df69cefa112ff>, name = "user01@test.home"]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [CHAP Success id=0xc4 "Access granted"]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [IPCP ConfReq id=0x1 <addr 10.0.0.1> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [IPCP ConfNak id=0x1 <addr 10.67.15.1>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [proto=0x8207] 01 01 00 04
Oct 18 08:43:40 HINAKO pppd[4917]: Unsupported protocol 'Cisco Discovery Protocol Control' (0x8207) received
Oct 18 08:43:40 HINAKO pppd[4917]: sent [LCP ProtRej id=0x3 82 07 01 01 00 04]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [IPCP ConfRej id=0x1 <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [IPCP ConfReq id=0x2 <addr 10.0.0.1>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [IPCP ConfReq id=0x2 <addr 10.67.15.1>]
Oct 18 08:43:40 HINAKO pppd[4917]: sent [IPCP ConfAck id=0x2 <addr 10.67.15.1>]
Oct 18 08:43:40 HINAKO pppd[4917]: rcvd [IPCP ConfAck id=0x2 <addr 10.0.0.1>]
Oct 18 08:43:40 HINAKO pppd[4917]: Cannot determine ethernet address for proxy ARP
Oct 18 08:43:40 HINAKO pppd[4917]: local IP address 10.0.0.1
Oct 18 08:43:40 HINAKO pppd[4917]: remote IP address 10.67.15.1
Oct 18 08:43:40 HINAKO pppd[4917]: Script /etc/ppp/ip-up started (pid 4920)
Oct 18 08:43:40 HINAKO pppd[4917]: Script /etc/ppp/ip-up finished (pid 4920), status = 0x0
CISCO の gi0/1 に適当なケーブルを繋いで up させてから Fedora でルートを切ってやる。
[root@HINAKO ~]# ip route show
default via 192.168.0.254 dev eth0
10.67.15.1 dev ppp0 proto kernel scope link src 10.0.0.1
172.30.96.0/20 dev eth0 proto kernel scope link src 172.30.111.99
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.26
[root@HINAKO ~]# ip route add 172.16.0.0/24 dev ppp0 proto kernel scope link src 10.0.0.1
[root@HINAKO ~]# ip route show
default via 192.168.0.254 dev eth0
10.67.15.1 dev ppp0 proto kernel scope link src 10.0.0.1
172.16.0.0/24 dev ppp0 proto kernel scope link src 10.0.0.1
172.30.96.0/20 dev eth0 proto kernel scope link src 172.30.111.99
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.26
[root@HINAKO ~]# ping -c 4 172.16.0.1 2020-10-18 9:46:42
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=255 time=1.88 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=255 time=3.12 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=255 time=3.09 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=255 time=1.90 ms
--- 172.16.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 1.882/2.497/3.115/0.604 ms
[root@HINAKO ~]# tracepath 172.16.0.1 2020-10-18 9:46:52
1?: [LOCALHOST] pmtu 1454
1: 10.67.15.1 25.069ms reached
1: 10.67.15.1 1.907ms reached
Resume: pmtu 1454 hops 1 back 1
ちゃんと届きますね。
Fedora の方でルーティングを切るスクリプトを書いておきます。
#!/bin/bash
PPP_IF="$1"
PPP_TTY="$2"
PPP_SPEED="$3"
PPP_LOCAL="$4"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"
# 接続先の IP とその先のネットワークを組みで書いておく
IPREMOTE_1=10.0.10.1
IPREMOTE_NET_1=192.168.0.0/24
IPREMOTE_2=10.0.10.3
IPREMOTE_NET_2=192.168.1.0/24
# 接続先が一つで、ネットワークが複数の場合は、複数書けばいい。
IPREMOTE_3=10.0.10.5
IPREMOTE_NET_3=192.168.2.0/24
IPREMOTE_4=10.0.10.5
IPREMOTE_NET_4=192.168.3.0/24
# IP forwaard ON
echo 1 > /proc/sys/net/ipv4/ip_forward
# 無条件で追加するルーティング (接続先が一つならこれで良い)
/usr/sbin/ip route add 172.16.0.0/24 dev ${PPP_IF} proto kernel scope link src ${PPP_LOCAL}
count=1
while :
do
if [ $(eval echo '${'IPREMOTE_${count}'}') = "$PPP_REMOTE" ]; then
# /usr/sbin/ip route add 172.16.0.0/24 dev ${PPP_IF} proto kernel scope link src ${PPP_LOCAL}
printf "/usr/sbin/ip route add %s dev ${PPP_IF} proto kernel scope link src ${PPP_LOCAL}\n" `eval echo '$'IPREMOTE_NET_${count}`
fi
let count++
[ $(eval echo '${'IPREMOTE_${count}:-NULL'}') = "NULL" ] && break
done
exit 0
対地が複数ある場合、chap-secrets でユーザ (地点) 毎にアドレスを決めておき、PPP_REMOTE で判断して、必要な route を足すことで上手くいくと思います。
再起動したらまた Signal 11
Oct 18 10:41:13 HINAKO pppoe-server[415]: Session 17 created for client 00:2c:c8:a8:95:a0 (10.67.15.17) on eth0:1 using Service-Name ''
Oct 18 10:41:13 HINAKO pppd[415]: Warning: couldn't open ppp database /var/run/ppp/pppd2.tdb
Oct 18 10:41:13 HINAKO pppd[415]: pppd 2.4.7 started by root, uid 0
Oct 18 10:41:13 HINAKO pppd[417]: Fatal signal 11
Oct 18 10:41:13 HINAKO pppd[417]: Exit.
Oct 18 10:41:13 HINAKO pppd[415]: Couldn't get channel number: Input/output error
Oct 18 10:41:13 HINAKO pppd[415]: Script /usr/sbin/pppoe -n -I eth0:1 -e 17:00:2c:c8:a8:95:a0 -S '' finished (pid 417), status = 0x7f
Oct 18 10:41:13 HINAKO pppd[415]: Exit.
Oct 18 10:41:13 HINAKO pppoe-server[320]: Session 17 closed for client 00:2c:c8:a8:95:a0 (10.67.15.17) on eth0:1
Oct 18 10:41:13 HINAKO pppoe-server[320]: Sent PADT
Oct 18 10:41:13 HINAKO pppoe-server[320]: PADT for session 17 received from 00:2C:C8:A8:95:A0; should be from 00:00:00:00:00:00
Oct 18 10:41:35 HINAKO pppoe-server[418]: Session 18 created for client 00:2c:c8:a8:95:a0 (10.67.15.18) on eth0:1 using Service-Name ''
Oct 18 10:41:35 HINAKO pppd[418]: Warning: couldn't open ppp database /var/run/ppp/pppd2.tdb
Oct 18 10:41:35 HINAKO pppd[418]: pppd 2.4.7 started by root, uid 0
Oct 18 10:41:35 HINAKO pppd[420]: Fatal signal 11
Oct 18 10:41:35 HINAKO pppd[420]: Exit.
Oct 18 10:41:35 HINAKO pppd[418]: Couldn't get channel number: Input/output error
Oct 18 10:41:35 HINAKO pppd[418]: Script /usr/sbin/pppoe -n -I eth0:1 -e 18:00:2c:c8:a8:95:a0 -S '' finished (pid 420), status = 0x7f
Oct 18 10:41:35 HINAKO pppd[418]: Exit.
Oct 18 10:41:35 HINAKO pppoe-server[320]: Session 18 closed for client 00:2c:c8:a8:95:a0 (10.67.15.18) on eth0:1
Oct 18 10:41:35 HINAKO pppoe-server[320]: Sent PADT
Oct 18 10:41:35 HINAKO pppoe-server[320]: PADT for session 18 received from 00:2C:C8:A8:95:A0; should be from 00:00:00:00:00:00
また繋がらなくなりました。
[root@HINAKO ~]# ls -l `which pppd`
-rwxr-xr-x 1 root root 444584 Oct 18 08:28 /usr/sbin/pppd*
pppd のバイナリも変わっている雰囲気はない。
strace してみた
pppd を strace するスクリプトに置き換えてログを取る。
[root@HINAKO sbin]# cp /usr/sbin/pppd /usr/sbin/pppd.orig
[root@HINAKO sbin]# cat <<___QWERTY > /usr/sbin/pppd
#!/bin/sh
logger -p local2.err strace-pppd go
/usr/bin/strace /usr/sbin/pppd.orig "$@" >& /tmp/strace.log
___QWERTY
出力されたログ
....
rt_sigaction(SIGHUP, {sa_handler=0x559cf5b2b3e5, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x559cf5b2b446, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x559cf5b2b446, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGCHLD, {sa_handler=0x559cf5b2b4a6, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGUSR1, {sa_handler=0x559cf5b2b4d9, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGUSR2, {sa_handler=0x559cf5b2b524, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGABRT, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGALRM, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGFPE, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGILL, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGIO, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGPROF, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGSYS, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGTRAP, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGVTALRM, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGXCPU, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGXFSZ, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7fd99a547a70}, {sa_handler=0x559cf5b2b55a, sa_mask=[HUP INT USR2 TERM CHLD], sa_flags=SA_RESTORER, sa_restorer=0x7fd99a547a70}, 8) = 0
getpid() = 3771
openat(AT_FDCWD, "/dev/ptmx", O_RDWR|O_CLOEXEC) = 6
ioctl(6, TIOCGPTN, [4]) = 0
chmod("/dev/pts/4", 0600) = 0
ioctl(6, TIOCSPTLCK, [0]) = 0
openat(AT_FDCWD, "/dev/pts/4", O_RDWR|O_NOCTTY|O_CLOEXEC) = 7
ioctl(7, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(7, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(7, TIOCMBIS, [TIOCM_DTR]) = -1 EINVAL (Invalid argument)
ioctl(7, TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(7, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 -opost -isig -icanon -echo ...}) = 0
dup(3) = 8
close(8) = 0
pipe([8, 9]) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fd99a47d510) = 3772
close(9Fatal signal 11
) = 0
read(8, "", 1) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3772, si_uid=0, si_status=127, si_utime=0, si_stime=0} ---
rt_sigreturn({mask=[]}) = 0
...
うーん?プロセスもフォークしてるから良く分からない。
しかしまぁ、もう一度 dnf reinstall rpmbuild/RPMS/x86_64/ppp-2.4.7-35.fc32.x86_64.rpm
したら動くのよねぇ。難しい。
glibc を自前ビルドして入れなおしてみた
失敗
[root@HINAKO ~]# dnf provides libnss_files.so.2
Last metadata expiration check: 4:21:31 ago on Sun Oct 18 18:58:28 2020.
glibc-2.31-2.fc32.i686 : The GNU libc libraries
Repo : fedora
Matched from:
Provide : libnss_files.so.2
glibc-2.31-4.fc32.i686 : The GNU libc libraries
Repo : @System
Matched from:
Provide : libnss_files.so.2
glibc-2.31-4.fc32.i686 : The GNU libc libraries
Repo : updates
Matched from:
Provide : libnss_files.so.2
[root@HINAKO ~]# curl -O ftp://ftp.iij.ad.jp/pub/linux/Fedora/fedora/linux/updates/32/Everything/SRPMS/Packages/g/glibc-2.31-4.fc32.src.rpm
[root@HINAKO ~]# rpmbuild --rebuild glibc-2.31-4.fc32.src.rpm
Installing glibc-2.31-4.fc32.src.rpm
setting SOURCE_DATE_EPOCH=1594771200
error: Failed build dependencies:
audit-libs-devel >= 1.1.3 is needed by glibc-2.31-4.fc32.x86_64
bison >= 2.7 is needed by glibc-2.31-4.fc32.x86_64
gd-devel is needed by glibc-2.31-4.fc32.x86_64
glibc-static is needed by glibc-2.31-4.fc32.x86_64
libpng-devel is needed by glibc-2.31-4.fc32.x86_64
libstdc++-static is needed by glibc-2.31-4.fc32.x86_64
python3-devel is needed by glibc-2.31-4.fc32.x86_64
python3dist(langtable) is needed by glibc-2.31-4.fc32.x86_64
texinfo >= 5.0 is needed by glibc-2.31-4.fc32.x86_64
valgrind is needed by glibc-2.31-4.fc32.x86_64
[root@HINAKO ~]# dnf install audit-libs-devel bison gd-devel glibc-static libpng-devel libstdc++-static python3-devel 'python3dist(langtable)' texinfo valgrind
...
[root@HINAKO ~]# rpmbuild --rebuild glibc-2.31-4.fc32.src.rpm
...
[root@HINAKO ~]# dnf reinstall rpmbuild/RPMS/x86_64/{glibc-2.31-4.fc32.x86_64.rpm,glibc-common-2.31-4.fc32.x86_64.rpm,glibc-headers-2.31-4.fc32.x86_64.rpm,glibc-devel-2.31-4.fc32.x86_64.rpm,glibc-static-2.31-4.fc32.x86_64.rpm,glibc-langpack-ja-2.31-4.fc32.x86_64.rpm}
Last metadata expiration check: 0:06:06 ago on Mon 19 Oct 2020 02:13:04 AM JST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Reinstalling:
glibc x86_64 2.31-4.fc32 @commandline 3.3 M
glibc-common x86_64 2.31-4.fc32 @commandline 1.7 M
glibc-devel x86_64 2.31-4.fc32 @commandline 1.0 M
glibc-headers x86_64 2.31-4.fc32 @commandline 457 k
glibc-langpack-ja x86_64 2.31-4.fc32 @commandline 407 k
glibc-static x86_64 2.31-4.fc32 @commandline 1.5 M
Transaction Summary
========================================================================================================================
Total size: 8.3 M
Installed size: 36 M
Is this ok [y/N]:y
→ Signal 11 失敗
libcap-ng のビルド
[root@HINAKO ~]# rpmbuild --rebuild libcap-ng-0.7.11-1.fc32.src.rpm
Installing libcap-ng-0.7.11-1.fc32.src.rpm
setting SOURCE_DATE_EPOCH=1598140800
error: Failed build dependencies:
swig is needed by libcap-ng-0.7.11-1.fc32.x86_64
[root@HINAKO ~]# dnf list --installed libcap-ng
Installed Packages
libcap-ng.x86_64 0.7.11-1.fc32
ん?良く分からん。
失敗
今後
→ LDFLAGS に -static を指定してスタティックライブラリにしてみる。
→ 駄目なら ldd pppd
して、関連するライブラリを自前ビルド
諦めて、起動する度に dnf reinstall
するか...
※メモ
WSL の中から Windows の表のインターフェイスの IPv4 アドレスを知るコマンド
% /mnt/c/Windows/System32/netsh.exe interface ipv4 dump | sed -ne 's/.*ethernet.*address=\([^ ]*\).*/\1/p'
syslog-ng の vim syntax ファイル
https://github.com/oxo42/vimrc/blob/master/syntax/syslog-ng.vim