はじめに
UbuntuのデスクトップでNetworkManagerでIPのDHCPからの自動取得ができずに困っていました。一応、dhclientで取得はできるのですが、再起動すると戻ってしまうので困っていました。そこで、NetworkManagerで、コネクションを割り当てしようとしましたが、
エラー: 接続のアクティベーションに失敗: No suitable device found for this connection (device eno1 not available because profile is not compatible with device (mismatching interface name)).
などと出てしまい、接続できませんでした。それの解決が今回の課題です。
結論
NetworkManagerが自動で生成するコネクションがダメダメ
connection.typeがtunではなくethernetに
tun.modeが2(tap)ではなく1(tun)に
設定されたたせいです。
手順
Softether自体は接続済みで、DHCPから取得だけ行いたい場合を想定しています。
vpn_vpnはSoftetherの仮想インターフェースの名前です。
1. 接続されていないことの確認$ nmcli device show vpn_vpn
GENERAL.TYPEがtun、GENERAL.STATEが切断済みとなっていることを確認
既に接続されている場合はsudo nmcli connection down vpn_vpn
とかで落とします。
2. 既に存在する仮想Nic用コネクションを確認$ nmcli connection show
たぶん、netplan-vpn_vpnみたいなのが存在すると思います。覚えておいてください。
3. 既に存在する仮想Nic用コネクションを削除$ sudo nmcli connection delete netplan-vpn_vpn
先ほど確認した既に存在するコネクションを削除します。
4. 新たにコネクションをtun用として作成$ sudo nmcli connection add type tun con-name netplan-vpn_vpn ifname vpn_vpn
コネクション名は何でも良いですが、消したものと同じ名前にしています。
5. tunモードを変更
$ sudo nmcli connection modify netplan-vpn_vpn tun.mode 2
1(tun)から2(tap)に変更します。
6. 適用$ sudo nmcli connection up netplan-vpn_vpn
これでアクティベートされれば完了です。
IPアドレスの固定
固定したい場合は、/etc/netplaneに保存されているyamlを直接編集もしくは、手順5の様にすればできます。nmcli connection showで確認できるuuidがファイル名の一部になっています。詳しい手順は自分で、「NetworkManager IP 固定」で調べてください。
解決した方法
dhclientで取得すると、GENERAL.STATEが100 (接続済み (外部))となり、正しいコネクションが生成されます。それを、nmcli device show vpn_vpnで見て、自動生成されたものと見比べました。はじめは、connection.typeが802-3-ethernetになっていたので、tunに変更しました。しかし、それでも
エラー: 接続のアクティベーションに失敗: Failed to find a compatible device for this connection
と出てしまうので、更に見比べて、tun.modeが1(tun)になっていたのを2(tap)に変更しました。これで解決しました。
おわりに
半日かかりましたが、なんとかなってよかったです。シェルスクリプトをかいてsystemdで実行する方法もありますが、あまりにもエレガントさに欠けるのでやめました。
ちなみに、Ubuntuだとデスクトップ付きだと、NetWorkManagerのようで、Server版では、Netplane(systemd-networkd)っぽいです。