![如何从 shell 脚本/命令行配置新的 NetworkManager 连接?](https://linux22.com/image/1436944/%E5%A6%82%E4%BD%95%E4%BB%8E%20shell%20%E8%84%9A%E6%9C%AC%2F%E5%91%BD%E4%BB%A4%E8%A1%8C%E9%85%8D%E7%BD%AE%E6%96%B0%E7%9A%84%20NetworkManager%20%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我整天都在尝试找到一种方法来使用终端/shell 脚本配置可由 NetworkManager 管理的新连接,但没有成功。
原因是我有很多 openvpn 配置文件,我想有一种快速便捷的方法来导入它们,同时因为 NetworkManager openvpn 插件不会解析嵌入在配置文件中的证书,所以配置新 VPN 连接的唯一方法是运行脚本从配置文件中提取证书后通过 GUI 手动执行此操作,这是一个相当漫长而繁琐的过程。
我发现在 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 可以从哪里读取配置文件?
答案1
检查你的/etc/NetworkManager/NetworkManager.conf
下面[main]
应该有一个plugins
指令,如果你已经启用了keyfile
插件(即plugins=keyfile,ifupdown
或类似的),它应该监视/etc/NetworkManager/system-connections/
目录中的文件变化。
此外,aman NetworkManager.conf
告诉你“它将忽略除 root 之外的任何用户或组可读或可写的文件“”。
不知道这是否能解决您的问题,但值得一试!
根据这,它应该与 NetworkManager v7+ 兼容
干杯!/丹尼尔
答案2
这对我有用:
nmcli reload "your connection name"
然后重新启动。重新激活可能也会有效。
答案3
运行没有连接名称的重新加载命令也可以正常工作 - 连接名称由脚本本身内的变量定义id=
,可以与文件名不同。
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