Рубрики
*NIX информация

network-manager / nmcli

Основные команды nmcli:

Просмотр сетевых интерфейсов:
nmcli device status

Просмотр всех подключений (профилей):
nmcli connection show


Управление проводными соединениями (Ethernet, eth0):
nmcli con add type ethernet ifname eth0 con-name eth0-dhcp ipv4.method auto
nmcli con up eth0-dhcp

Подключение со статическим IP:
nmcli con add type ethernet ifname eth0 con-name eth0-static \
    ip4 192.168.1.100/24 gw4 192.168.1.1
nmcli con modify eth0-static ipv4.dns "8.8.8.8,8.8.4.4"
nmcli con up eth0-static

Отключение/удаление соединения:
nmcli con down eth0-static  # Отключить
nmcli con delete eth0-static  # Удалить профиль


Управление Wi-Fi (wlan0):
Поиск доступных Wi-Fi сетей:
nmcli device wifi list

Подключение к Wi-Fi:
nmcli device wifi connect "MyWiFi" password "mypassword"

Подключение к Wi-Fi через создание профиля:
nmcli con add type wifi ifname wlan0 con-name mywifi ssid "MyWiFi"
nmcli con modify mywifi wifi-sec.key-mgmt wpa-psk
nmcli con modify mywifi wifi-sec.psk "mypassword"
nmcli con up mywifi

Создание точки доступа (Wi-Fi Hotspot)
nmcli con add type wifi ifname wlan0 con-name hotspot \
    ssid MyHotspot mode ap ip4 192.168.100.1/24
nmcli con modify hotspot wifi-sec.key-mgmt wpa-psk
nmcli con modify hotspot wifi-sec.psk "MyPassword123"
nmcli con up hotspot

Отключение Wi-Fi:
nmcli con down mywifi  # Отключить
nmcli con delete mywifi  # Удалить профиль

Полезные команды:
nmcli general status            #Статус NetworkManager
nmcli device show wlan0         #Подробная информация об интерфейсе
nmcli connection edit mywifi    #Редактировать профиль в интерактивном режиме
nmcli radio wifi on/off         #Включить/выключить Wi-Fi
nmcli monitor                   #Режим мониторинга (показывает события сети)


Решение проблем:
Wi-Fi не включается?
nmcli radio wifi on  # Включить Wi-Fi
rfkill unblock wifi  # Разблокировать, если софт-блок
Точка доступа не запускается?
sudo systemctl restart NetworkManager
nmcli con up hotspot
journalctl -u NetworkManager -f  # Логи
Нет интернета в Hotspot?
sudo iptables -t nat -L  # Проверить правила
sudo sysctl net.ipv4.ip_forward  # Должно быть =1

vpn

nmcli - network manager client
nmcli connection show - показать доступные соединения
nmcli connection  up [vpnName] - подключение к VPN из командной строки
nmcli connection down [vpnName] - отключение от VPN из командной строки

Пример:
nmcli connection up vpn.site.ru
nmcli connection dowm vpn.site.ru




vpn openvpn / wg / l2tp/ ipsec / pptp :

Установка пакетов:
# Debian/Ubuntu
sudo apt install network-manager-openvpn network-manager-openvpn-gnome  
sudo apt install network-manager-wireguard
sudo apt install network-manager-l2tp network-manager-l2tp-gnome
sudo apt install network-manager-pptp
# Arch Linux
sudo pacman -S networkmanager-openvpn
sudo pacman -S networkmanager-wireguard
sudo pacman -S networkmanager-l2tp

# OpenVPN
Импорт конфига .ovpn:
nmcli connection import type openvpn file /path/to/config.ovpn
Настройка вручную:
nmcli con add type vpn ifname eth0 con-name myvpn vpn-type openvpn \
    vpn.data "username=your_login, password=your_pass, remote=server.com, port=1194, dev=tun, comp-lzo=yes"
Подключение:
nmcli con up myvpn

# WireGuard
Импорт конфига .conf:
nmcli connection import type wireguard file /path/to/wg0.conf
Настройка вручную:
nmcli con add type wireguard ifname wg0 con-name mywg \
    wireguard.private-key "base64_private_key" \
    wireguard.peer "public-key=base64_peer_key, endpoint=server.com:51820, allowed-ips=0.0.0.0/0"
Подключение:
nmcli con up mywg

# L2TP/IPsec
Создание подключения:
nmcli con add type vpn ifname eth0 con-name myl2tp vpn-type l2tp \
    vpn.data "gateway=server.com, ipsec-enabled=yes, ipsec-psk=pre_shared_key, user=login, password=pass"
Подключение:
nmcli con up myl2tp

# Управление VPN
nmcli con show --active	 # Показать активные подключения (включая VPN)
nmcli con down myvpn	 # Отключить VPN
nmcli con delete myvpn	 # Удалить VPN-профиль
nmcli -p con show myvpn	 # Подробный просмотр настроек VPN

Настройка eth0 для получения интернета по dhcp

nmcli con add type ethernet ifname eth0 con-name eth0-dhcp ipv4.method auto
nmcli con up eth0-dhcp

Dhcp + статически адрес для eth0

nmcli con add type ethernet ifname eth0 con-name eth0-dhcp ipv4.method auto
nmcli con modify eth0-dhcp +ipv4.addresses "10.10.10.1/24"
nmcli con up eth0-dhcp

Создание статики с адресом 10.10.10.1/24:

nmcli con add type ethernet ifname eth0 con-name eth0-static ipv4 10.10.10.1/24
nmcli con up eth0-static

Создание нового подключения-алиаса eth:1

nmcli con add type ethernet ifname eth0 con-name eth0-alias \
    ipv4.addresses "10.10.10.1/24" \
    ipv4.method manual \
    ipv4.gateway "" \
    ipv4.dns "" \
    ipv4.ignore-auto-dns true \
    ipv4.never-default true \
    connection.autoconnect yes

Создание точки доступа MyWiFiAP с паролем MyPassword123 :

nmcli con add type wifi ifname wlan0 con-name hotspot ssid MyWiFiAP mode ap ip4 192.168.100.1/24
nmcli con modify hotspot wifi-sec.key-mgmt wpa-psk
nmcli con modify hotspot wifi-sec.psk "MyPassword123"
nmcli con up hotspot

Настройка VLAN (например, eth0.100):

nmcli con add type vlan ifname eth0.100 dev eth0 id 100 \
    ipv4.addresses "192.168.100.1/24" \
    ipv4.method manual
nmcli con up vlan-eth0.100

Создание моста (br0):

nmcli con add type bridge ifname br0
nmcli con add type bridge-slave ifname eth0 master br0
nmcli con modify bridge-br0 ipv4.addresses "10.0.0.1/24" ipv4.method manual
nmcli con up bridge-br0

Файервол и форвард:

Ставим пакеты:
apt install  hostapd dnsmasq iptables

Пример скрипта с помощью systemd
0. Создаем каталог и сервис
mkdir /etc/iptables 

cat > /etc/systemd/system/iptablessh.service << "EOF"
[Unit]
Description= add firewale rule
After=network.target
 
[Service]
Type=simple
TimeoutStartSec=10
ExecStart=/etc/iptables/iptables.sh
 
[Install]
WantedBy=multi-user.target
EOF
 

 
2. Создаем скрипт
cat > /etc/iptables/iptables.sh << "EOF"
#!/bin/bash
iptables-restore /etc/iptables/iptable.4
ip6tables-restore /etc/iptables/iptable.6
sysctl -w net.ipv4.ip_forward=1
EOF


chmod +x  /etc/iptables/iptables.sh


3. Создаем правила
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables-save > /etc/iptables/iptable.4 

cat > /etc/iptables/iptable.6 << "EOF"
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
COMMIT
EOF


4. Включаем демон 
systemctl daemon-reload 
systemctl status iptablessh.service 
systemctl --failed 
systemctl enable iptablessh.service 
systemctl start iptablessh.service 

!!! Для автоматического запуска NAT после перезагрузки добавьте net.ipv4.ip_forward=1 в /etc/sysctl.conf или добавить в скрипт

конфиг /etc/dnsmasq.conf или /etc/dnsmasq.d/hotspot.conf

Создаем конфиг
cat > /etc/dnsmasq.d/hotspot.conf << "EOF"
port=0
#no-resolv
server=10.10.99.1

# Google's nameservers, for example
server=8.8.8.8
server=8.8.4.4

listen-address=10.10.99.1
no-hosts
dhcp-range=10.10.99.100,10.10.99.200,15m
dhcp-option=option:router,10.10.99.1
dhcp-option=option:dns-server,10.10.99.1,8.8.8.8,8.8.4.4
cache-size=1000


dhcp-host=b8:27:eb:93:94:9c,10.10.99.10,PC-5000
dhcp-host=b8:27:eb:78:08:57,10.10.99.20,PC-6000


EOF



Если что то не работает:

Проверьте логи NetworkManager:
journalctl -u NetworkManager -f

Убедитесь, что hostapd и dnsmasq работают:
sudo systemctl status hostapd dnsmasq

Если точка доступа не запускается, попробуйте вручную:
sudo systemctl restart NetworkManager
nmcli con up hotspot

# Просмотр выданных адресов:
cat /var/lib/misc/dnsmasq.leases
# Или для NetworkManager:
journalctl -u NetworkManager | grep -i dhcp