突然、自宅サーバに外部からアクセスできなくなってしまった。
実は数日前から発生していた模様だけど、今日にやってやっと気づく。
原因は、契約しているプロバイダから配賦されてるIPアドレスがいつの間にか変わってたこと。
そう言えば、CentOS8に変えてからddclientを導入してなかったので、
備忘録がてらインストール手順を記載。
基本的には公式が提示してる手順を使用する。
https://help.dyn.com/ddclient/
Contents
最新版をダウンロード
SOURCEFORGEの最新版を使用する。
http://sourceforge.net/projects/ddclient/
|
1 2 3 |
# cd tmp # wget https://sourceforge.net/projects/ddclient/files/ddclient/ddclient-3.9.1/ddclient-3.9.1.tar.gz # tar -xvzf ddclient-3.9.1.tar.gz |
インストール
解凍してできた実行ファイルとコピーするだけ。
|
1 2 3 4 5 |
# cd ddclient-3.9.1/ # cp ddclient /usr/sbin/ # mkdir /etc/ddclient # mkdir /var/cache/ddclient # cp sample-etc_systemd.service /etc/systemd/system/ddclient.service |
依存モジュールインストール
Perlモジュールが必要なので、cpan入れてからインストール。
|
1 2 3 4 5 |
# dnf install perl-App-cpanminus # cpanm Data::Validate::IP # cpanm IO::Socket::SSL # cpanm JSON::PP # cpanm IO::Socket::INET6 |
設定ファイル作成
公式ページに設定ファイル作成用スクリプトが用意されている。
https://account.dyn.com/tools/clientconfig.html
# vim /etc/ddclient/ddclient.confで内容をコピーするだけ。
起動
最初はマニュアル実行する必要がある。
ddclient -daemon=0 -debug -verbose -noquiet
ログの最後にSUCCESSが表示されていたら、systemdに登録する。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# systemctl enable ddclient.service # systemctl start ddclient.service # systemctl status ddclient.service ● ddclient.service - Dynamic DNS Update Client Loaded: loaded (/etc/systemd/system/ddclient.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-06-11 18:44:23 JST; 3s ago Process: 22501 ExecStart=/usr/sbin/ddclient (code=exited, status=0/SUCCESS) Main PID: 22502 (ddclient - slee) Tasks: 1 (limit: 26213) Memory: 9.8M CGroup: /system.slice/ddclient.service mq22502 ddclient - sleeping for 600 seconds 6月 11 18:44:23 starseeker.podzone.org systemd[1]: Starting Dynamic DNS Update Client... 6月 11 18:44:23 starseeker.podzone.org systemd[1]: Started Dynamic DNS Update Client. |
ddclient.serviceの起動に失敗する
突然ddclient.serviceの起動が失敗することに。
手動起動は上手く行くけど、daemon起動ができない。
|
1 2 3 4 5 6 7 8 9 10 11 |
# systemctl status ddclient ● ddclient.service - Dynamic DNS Update Client Loaded: loaded (/etc/systemd/system/ddclient.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Thu 2022-04-14 23:34:22 JST; 7min ago Process: 94638 ExecStart=/usr/sbin/ddclient (code=exited, status=0/SUCCESS) Main PID: 94639 (code=exited, status=1/FAILURE) 4月 14 23:34:20 starseeker.podzone.org systemd[1]: Starting Dynamic DNS Update Client... 4月 14 23:34:20 starseeker.podzone.org systemd[1]: Started Dynamic DNS Update Client. 4月 14 23:34:22 starseeker.podzone.org systemd[1]: ddclient.service: Main process exited, code=exited, status=1/FAILURE 4月 14 23:34:22 starseeker.podzone.org systemd[1]: ddclient.service: Failed with result 'exit-code'. |
メッセージログを見ると、/var/cache/ddclient/ddclient.cacheが作れなくて死んでる模様。
|
1 2 3 4 5 6 |
Apr 14 23:34:20 starseeker systemd[1]: Starting Dynamic DNS Update Client... Apr 14 23:34:20 starseeker systemd[1]: Started Dynamic DNS Update Client. Apr 14 23:34:22 starseeker ddclient[94639]: SUCCESS: updating starseeker.podzone.org: good: IP address set to 121.95.13.9 Apr 14 23:34:22 starseeker ddclient[94639]: FATAL: Cannot create file '/var/cache/ddclient/ddclient.cache'. (Permission denied) Apr 14 23:34:22 starseeker systemd[1]: ddclient.service: Main process exited, code=exited, status=1/FAILURE Apr 14 23:34:22 starseeker systemd[1]: ddclient.service: Failed with result 'exit-code'. |
アクセス権なのでSELinuxの問題の模様。
SELinuxログ確認
aureportで確認。
|
1 2 3 |
# aureport -a | grep ddclient 1. 2022年04月09日 09:51:08 ddclient system_u:system_r:ddclient_t:s0 4 file getattr unconfined_u:object_r:var_t:s0 denied 145028 2. 2022年04月09日 09:51:09 ddclient - clos system_u:system_r:ddclient_t:s0 257 file write unconfined_u:object_r:var_t:s0 denied 145030 |
ddclient_tによるvar_tへのアクセス権がない模様。
念のため確認。
|
1 2 3 4 5 6 |
# sesearch -A -s ddclient_t -t var_t | grep ddclient allow ddclient_t file_type:filesystem getattr; allow ddclient_t var_t:dir { getattr open search }; allow ddclient_t var_t:dir { getattr open search }; [ nscd_use_shm ]:True allow ddclient_t var_t:lnk_file { getattr read }; allow ddclient_t var_t:lnk_file { getattr read }; [ nscd_use_shm ]:True |
現状はリード位しか権限ない模様。
ddclient_tによるvar_t書き込み権限付与
簡単にteファイルを作成してしまう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# ausearch -c 'ddclient' --raw | audit2allow -M ddclient-policy # cat ddclient-policy.te module ddclient-policy 1.0; require { type ddclient_t; type var_t; class file { getattr write }; class dir write; } #============= ddclient_t ============== allow ddclient_t var_t:dir write; allow ddclient_t var_t:file { getattr write }; |
うーん、openとreadがないのが気になるので編集する。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# vim ddclient-policy.te module ddclient-policy 1.0; require { type ddclient_t; type var_t; class file { getattr open read write }; class dir write; } #============= ddclient_t ============== #!!!! This avc is allowed in the current policy allow ddclient_t var_t:dir write; #!!!! This avc is allowed in the current policy allow ddclient_t var_t:file { getattr write }; allow ddclient_t var_t:file { open read }; |
これを適用しておく。
|
1 2 3 4 5 6 7 8 |
# semodule -i ddclient-policy.pp # sesearch -A -s ddclient_t -t var_t | grep ddclient allow ddclient_t file_type:filesystem getattr; allow ddclient_t var_t:dir { getattr open search write }; allow ddclient_t var_t:dir { getattr open search }; [ nscd_use_shm ]:True allow ddclient_t var_t:file { getattr open read write }; allow ddclient_t var_t:lnk_file { getattr read }; allow ddclient_t var_t:lnk_file { getattr read }; [ nscd_use_shm ]:True |
ddclient.service再起動
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# systemctl restart ddclient # systemctl status ddclient ● ddclient.service - Dynamic DNS Update Client Loaded: loaded (/etc/systemd/system/ddclient.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2022-04-15 00:09:36 JST; 5s ago Process: 94947 ExecStart=/usr/sbin/ddclient (code=exited, status=0/SUCCESS) Main PID: 94948 (ddclient - slee) Tasks: 1 (limit: 49490) Memory: 9.7M CGroup: /system.slice/ddclient.service mq94948 ddclient - sleeping for 600 seconds 4月 15 00:09:36 starseeker.podzone.org systemd[1]: Starting Dynamic DNS Update Client... 4月 15 00:09:36 starseeker.podzone.org systemd[1]: Started Dynamic DNS Update Client. |
成功。