ネットワークスケジューラ

ネットワークスケジューラ

私はUbuntu 18.04サーバーを使用しています。 CloudFlareでIPアドレスを更新するスクリプト(DynDNSスクリプト)を実行する必要があります。以前のバージョンでは、enp1s0インターフェースのDHCLIENT出口フックを使用してこれを実行できました。

ただし、systemd は独自の組み込み DHCP クライアントを使用します。 DCHPクライアントに新しいIPアドレスを提供した後、すぐにbashスクリプトを実行するシステムデバイスを作成するにはどうすればよいですか?

Systemdはenp1s0インターフェースを管理しています。

#sudo  systemctl status systemd-networkd
● systemd-networkd.service - Network Service
   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-18 01:54:16 +08; 10h ago
     Docs: man:systemd-networkd.service(8)
 Main PID: 878 (systemd-network)
   Status: "Processing requests..."
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/systemd-networkd.service
           └─878 /lib/systemd/systemd-networkd

Sep 18 01:54:27 xxx systemd-networkd[878]: enp1s0: Configured

答え1

ネットワークスケジューラ

スクリプトを実行したい時点をより詳細に制御するために使用できます。

スクリプトを実行する状態に応じて、スクリプトを配置するフォルダを決定する必要があります。

例:

routable.d今回はこのフォルダを使用します。リンクに設定された携帯通信会社とルーティング可能なアドレスがあります。

スクリプトファイルを次の場所にコピーします。/usr/lib/networkd-dispatcher/routable.d

cp path/to/my/ipchange_script.sh /usr/lib/networkd-dispatcher/routable.d

ipchange_script.sh

#!/bin/bash


if [[ $IFACE == "eth0" && $AdministrativeState == "configured" ]]; then
    echo "IP Address has changed to: $ADDR"  >> /tmp/iplog.txt
fi

exit 0

IPを更新してdhclient -r eth0 && dhclient -v eth0スクリプト出力を表示したり、スクリプトにエラーがないかどうかを確認するには、次のコマンドを使用して確認できます。

sudo service networkd-dispatcher status

PS数ヶ月間検索してみましたが、使い方については何も見つからなかったので、networkd-dispatcher今日でしか見つけませんでした。楽しむ!

答え2

私は体系的な解決策を知りませんが、インターフェイスの変更を効果的に監視し、出力をスクリプトにパイプip monitorして興味のある変更を見つけることができます。たとえば、私がそうした場合

$ ip monitor address dev enp3s0

次に、 enp3s0 インターフェイスに新しいエイリアスアドレスを追加すると、次の行が表示されます。

2: enp3s0    inet 192.168.77.77/24 brd 192.168.77.255 scope global enp3s0:1
       valid_lft forever preferred_lft forever

私の考えでは、dhcpにも同様の変化があります。

必要に応じて、同じことを行うCプログラムを書くことができます。ipevent.c

答え3

多くのパッケージがまだsystemd-networkd動作していません...(LaunchPadのバグレポートを見る)

現在、ISC DHCPクライアント(dhclient)は、特に多くのISPのDHCPサーバー(Juniper Networksを探しています)が必要とするカスタムDHCPオプションとオペレーティングシステムスクリプトのサポートによってまだ最高です。

したがって、/etc/systemd/network動的IPアドレス指定を処理する構成ファイルを編集し、systemdのDHCPを次のように無効にします。

[Match]
Name=eth1
[Network]
# Using ISC DHCP client (dhclient) instead of systemd-networkd
# Better support of DHCP-Options and OS-specific script supports
DHCP=no

dhclient次に、ISC DHCPクライアント()で次のことを確認します/etc/network/interfaces

auto eth0
iface eth0 inet dhcp

のため/etc/dhcp/dhclient.conf

send host-name "Wireless_Broadband_Router";
send domain-name "home";
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, time-servers, log-servers,
    default-ip-ttl, dhcp-requested-address, dhcp-lease-time,
    dhcp-server-identifier,dhcp-parameter-request-list,
    vendor-class-identifier,dhcp-client-identifier,
    www-server,
    dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, 
    dhcp6.sntp-servers,
    interface-mtu,
    ntp-servers;

最後のステップは、システムにISC DHCPクライアントをデーモンとして起動させることです。からファイルを作成します。/etc/systemd/system/[email protected]

# cat /etc/systemd/system/[email protected] 
[Unit]
Description=dhclient on %I
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
# ExecStart=/sbin/dhclient -4 -q %I
ExecStart=/sbin/dhclient -4 -v -pf /run/dhclient.%I.pid -lf /var/lib/dhcp/dhclient.%I.leases %I

[Install]
WantedBy=multi-user.target

systemdそして、シェルで実行して、ISC DHCP クライアントをデーモンで使用できるようにします。

sudo systemctl daemon-reload   #makes the [email protected] available
sudo systemctl enable [email protected]
sudo systemctl start [email protected]

答え4

ネットワーク管理者の使用

networkd-dispatcherUbuntu Server 20.04ではdhcpの変更に応答できませんが、ネットワーク管理者systemd-networkd(Ubuntu Desktopで置き換えられます)はい。

  1. インストールするネットワーク管理者
sudo apt install network-manager

次の設定ファイルを編集します/etc/netplan/

network:
  version: 2
  renderer: NetworkManager

sudo netplan generate構成ファイルの生成ネットワーク管理者

  1. 無効systemd-networkdと再起動
sudo systemctl mask systemd-networkd
sudo reboot now
  1. 以下にスクリプトを入れてください/etc/NetworkManager/dispatcher.d

ネットワーク管理者$ 1 =インターフェイス、$ 2 =タスク(例:dhcp-changeup)で実行され、いくつかの環境変数が設定されます。ドキュメントを読むhttps://developer.gnome.org/NetworkManager/stable/NetworkManager.html

関連情報