Как настроить новое соединение NetworkManager из сценария / командной строки оболочки?
Я пытался найти способ настроить новое соединение, управляемое NetworkManager, используя скрипт терминала / оболочки в течение всего дня, но мне это не удалось.
Причина в том, что у меня много конфигурационных файлов openvpn, и я хотел иметь хороший и быстрый способ их импорта, так как плагин NetworkManager openvpn не анализирует сертификаты, встроенные в файлы конфигурации, поэтому единственный способ настроить новый VPN-соединение должно делать это вручную через графический интерфейс после запуска сценария для извлечения сертификатов из файлов конфигурации, что является довольно длительным и утомительным процессом.
Я обнаружил, что в RedHat утилита nmcli имеет возможность настроить новое соединение следующим образом:
nmcli con add [...]
Однако это невозможно на (стандартном) Linux Mint 17.1.
Я попытался добавить новое соединение вручную, добавив новый файл в /etc/NetworkManager/system-connections
[connection]
id=VPNConnection
id=3389cf54-949e-4c69-a746-864f0f8720b8
type=vpn
[vpn]
service-type=org.freedesktop.NetworkManager.openvpn
fragment-size=1300
connection-type=password-tls
password-flags=1
auth=MD5
tunnel-mtu=1500
cipher=AES-256-CBC
comp-lzo=yes
cert-pass-flags=0
remote=[vpn provider]
port=[vpn port]
mssfix=yes
username=[username]
remote-cert-tls=server
cert=[user cert]
ca=[ca cert]
key=[user priv. key]
[ipv6]
method=ignore
[ipv4]
method=auto
но эта новая конфигурация не отображается в NetworkManager.
Кроме того, у меня нет директории ~/.gconf/system, ни в моем личном доме, ни в /root.
Откуда NetworkManager может считывать файлы конфигурации?
3 ответа
Проверьте свои /etc/NetworkManager/NetworkManager.conf
Под [main]
должен быть plugins
директива и если вы включили keyfile
плагин (то есть plugins=keyfile,ifupdown
или аналогичный), он должен контролировать /etc/NetworkManager/system-connections/
каталог для изменения файла.
Далее, man NetworkManager.conf
говорит вам, что "он будет игнорировать файлы, которые доступны для чтения или записи любому пользователю или группе, кроме root".
Не знаю, решит ли это вашу проблему, но стоит проверить!
Согласно этому, он должен работать с NetworkManager v7+
Ура! / Даниэль
Это сработало для меня:
nmcli reload "your connection name"
с последующей перезагрузкой. Реактивация, вероятно, тоже подойдет.
Запуск команды перезагрузки без имени соединения работает нормально — имя соединения, которое определяется переменнойid=
внутри самого скрипта может отличаться от filenane.
nmcli connection reload
перезагрузит все соединения из/etc/NetworkManager/system-connections/
.
также три вещи, которые необходимо сделать:
chmod 600 /etc/NetworkManager/system-connections/*
chown root:root /etc/NetworkManager/system-connections/*
и сам скрипт должен быть валидным :)
Чтобы проверить, работает ли он нормально, вы можете создать простой сценарий для статического адреса IPv4 и отключить IPv6 с помощью такого сценария:
#default first network interface is ens192
interface=ens192
#IPv4
ipv4=10.151.62.83
#mask in one or two-digits format - for local networks 8 to 32
maskv4=24
#ipv4 gateway address
gateway=10.151.62.254
#dns
dns="10.0.0.1;10.0.0.2"
#domain which will be used to search hosts, can be more than one
domain="example.com;example.net"
echo -e "[connection]\nid=$interface\nuuid=$(uuidgen -t)\ntype=ethernet\nautoconnect-pririty=-999\ninterface-name=$interface\n\n[ethernet]\n\n[ipv4]\naddress1=$ipv4/$maskv4,$gateway\ndns=$dns\ndns-search=$domain;\nmay-fail=false\nmethod=manual\n\n[ipv6]\nignore-auto-dns=true\nignore-auto-routes=true\nmethod=disabled\nnever-default=true\n\n[proxy]" > /etc/NetworkManager/system-connections/$interface.nmconnection