Управляем сетевыми подключениями в linux с помощью консольной утилиты nmcli

Использование сетевых утилит traceroute, dig в CentOS

Для диагностики сетевых подключений в CentOS полезно использовать специальные утилиты. Но если вы использовали установку minimal, то их скорее всего в системе не будет. К примеру, популярная утилита traceroute при попытке ее запуска выдаст сообщение:

Ее нужно установить отдельно из репозитория:

То же самое с популярной программой dig для работы с dns серверами и записями:

Чтобы эта сетевая утилита заработала, необходимо установить пакет bind-utils:

Для поднятия тегированного интерфейса на CentOS нужно в первую очередь проверить поддержку ядром 8021q:

Если сообщений об ошибке нет, значит все в порядке. Если же модуль не найден, необходимо пересобрать модули ядра, включив поддержку необходимого модуля.

Теперь создаем файл конфигурации для vlan в /etc/sysconfig/network-scripts:

Обращаю внимание на выделенное жирным. Во всех инструкциях в интернете, что мне попались, этот параметр был указан как TYPE=Ethernet, но с такой настройкой интерфейс с vlan не поднимался, появлялась ошибка:. Error: no device found for connection ‘System vlan4000’

Error: no device found for connection ‘System vlan4000’.

Только после того, как я исправил, все заработало как надо. Так что сохраняем и активируем интерфейс:

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

Проверяем наш vlan:

Все в порядке, тегированный интерфейс поднят. По аналогии можно создать еще несколько подобных интерфейсов, не забывая изменять им имена и адреса.

На этом мой объемный материал на тему настройки сети в CentOS закончен.

Буду очень рад комментариям, замечаниям, поправкам. Они наверняка будут. Создавая подобные материалы я в первую очередь учусь сам и подтягиваю свои знания в предметной области. Тут могут быть где-то ошибки и описки, хотя я и проверяю все на живых системах во время написания руководств, но все равно возможны неточности и опечатки.

Решение проблем

Проблема масштабирования TCP window

Пакеты TCP содержат в своих заголовках значение «window», обозначающее, как много данных другие узлы могут посылать в ответ. Это значение может содержать только 16 бит информации, следовательно, размер window должен быть не более 64Kб. Пакеты TCP на некоторое время кэшируются (они должны быть перераспределены), а, поскольку память ограничена, один узел может легко перевалить за это значение.

Похоже, некоторые нестандартные маршрутизаторы и межсетевые экраны в интернете переписывают этот коэффициент в значение 0, что вызывает недопонимание между узлами. В ядре Linux версии 2.6.17 была представлена новая схема подсчета, генерирующая максимальные коэффициенты масштабирования и виртуально делающая последующие подсчеты нестандартных маршрутизаторов и межсетевых экранов более видимыми.

В итоге соединение в лучшем случае очень медленное или часто рвется.

Диагностика

Прежде всего, необходимо разъяснить: это странная проблема. В некоторых случаях вы не сможете по-полной использовать соединения TCP (HTTP, FTP и т.д.), в других вы сможете обращаться к некоторым узлам (лишь нескольким).

Если у вас появилась такая проблема, вывод будет нормальным, логи — чистыми, а сообщит о нормальном состоянии… Все будет выглядеть нормально.

Если вы не можете просматривать никакие веб-сайты, но можете отправлять запросы ping на некоторые узлы, высока вероятность, что у вас именно эта проблема: ping использует ICMP и не затрагивается проблемами TCP.

Вы можете попробовать использовать Wireshark. В итоге вы можете получить успешные соединения UDP и ICMP, но неудачные соединения TCP (только для неизвестных узлов).

Способы решения проблемы

Плохой

Плохой способ заключается в изменении значения , на котором основывается подсчет коэффициента масштабирования. Несмотря на то, что это должно помочь для большинства узлов, это не гарантирует успеха, особенно для очень удаленных из них.

# echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem
Лучший

Проблема вызвана нестандартными маршрутизаторами/межсетевыми экранами, поэтому замените их. Некоторые пользователи отмечали, что нестандартным маршрутизатором был их собственный маршрутизатор DSL.

На странице LKML есть также несколько ссылок по теме.

Check the connection

To troubleshoot a network connection, go through the following conditions and ensure that you meet them:

  1. Your is listed and enabled. Otherwise, check the device driver – see or .
  2. You are connected to the network. The cable is plugged in or you are connected to the wireless LAN.
  3. Your network interface has an .
  4. Your is correctly set up.
  5. You can a local IP address (e.g. your default gateway).
  6. You can a public IP address (e.g. , which is a Google DNS server and is a convenient address to test with).
  7. Check if you can resolve domain names (e.g. ).

Ping

This article or section needs expansion.

ping is used to test if you can reach a host.

$ ping www.example.com
PING www.example.com (93.184.216.34): 56(84) data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
...

If you receive no reply, this may be related to your default gateway or your Internet Service Provider (ISP). You can run a traceroute to further diagnose the route to the host.

Note: If you receive an error like when executing ping, try to re-install the package.

Interfaces gráficas

Para configurar y acceder fácilmente a NetworkManager la mayoría de los usuarios desearán instalar un applet. Esta GUI normalmente se ubica en la bandeja del sistema (o área de notificación) y permite la selección de red y la configuración de NetworkManager. Existen distintos tipos de applets para los diferentes tipos de entornos de escritorio.

GNOME

El applet de GNOME (anteriormente gnome-network-manager) es lo suficientemente ligero y funciona en todos los entornos.

Si desea guardar los datos de autentificación (Wireless/DSL) y activar la configuración global de las conexiones, es decir, «disponible para todos los usuarios» instale y configure GNOME Keyring.

KDE

El frontend de Plasma de Network Manager es un widget disponible en los repositorios oficiales como el paquete . El anterior frontend de Plasma KNetworkManager también está disponible como paquete AUR desde aur.

Si tiene instalado tanto el widget Plasma como y no desea iniciar cuando usa KDE, añada la siguiente línea a :

NotShowIn=KDE

XFCE

Sin un demonio de notificación, generará los siguientes errores en stdout/stderr:

(nm-applet:24209): libnotify-WARNING **: Failed to connect to proxy
** (nm-applet:24209): WARNING **: get_all_cb: couldn't retrieve
system settings properties: (25) Launch helper exited with unknown
return code 1.
** (nm-applet:24209): WARNING **: fetch_connections_done: error
fetching connections: (25) Launch helper exited with unknown return
code 1.
** (nm-applet:24209): WARNING **: Failed to register as an agent:
(25) Launch helper exited with unknown return code 1

funciona normalmente, pero sin notificaciones.

Si nm-applet no le pide la contraseña cuando se conecta a las nuevas redes wifi, e inmediatamente después se desconecta, es probable que tenga que instalar .

Openbox

Para que NetworkManager funcione correctamente en Openbox, el applet de GNOME requiere el demonio de notificación , por la misma razón que en XFCE, y el paquete para poder mostrar el applet en la bandeja del sistema.

Si desea guardar los datos de autentificación (Wireless/DSL) instale y configure GNOME Keyring.

Otros escritorios y gestores de ventanas

En todos los demás casos, se recomienda usar el applet de GNOME. Deberá asegurarse que tiene instalado el paquete para poder ver el applet.

Para guardar información confidencial sobre las conexiones instale y configure GNOME Keyring.

Para ejecutar en un entorno sin una bandeja de sistema, puede utilizar o . Por ejemplo, puede agregar un script como este a su propia ruta:

nmgui
 #!/bin/sh
 nm-applet    > /dev/null 2>/dev/null &
 stalonetray  > /dev/null 2>/dev/null
 killall nm-applet

Al cerrar la ventana de stalonetray, cierra también, así que no consume memoria extra una vez que haya terminado con la configuración de red.

配置

NetworkManager 需要做这么几步保证正常运行。确保你按照一节的描述配置了。

NetworkManager的全局配置文件位于。额外的配置文件可以放进文件夹。通常全局的默认配置不需要改动。

设置 PolicyKit 权限

参照建立一个工作会话. 在工作会话中,你有三种方式授予NetworkManager工作所必须的权限.

方式 1. 登录后运行PolicyKit认证代理,比如 ( 的一部分). 当你添加和删除一个网络链接时会提示输入密码.

方式 2. 将你的账户加入账户组. 管理网络时你将不需要输入密码,但注意你的账户同时被赋予了此账户组的其他权限,比如运行sudo命令是无需密码.

方式 3. 将你的账户加入账户组,同时创建以下文件:

/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules
polkit.addRule(function(action, subject) {
  if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
    return polkit.Result.YES;
  }
});

所有在账户群中的用户都能免密码管理网络. 但是如果你没有在 中拥有一个活跃会话的话, 在systemd下此方式将失效.

使用 NetworkManager 调度网络服务

有些服务只有联网时才有意义,例如 OpenNTPD 和 网络文件系统挂载(netfs)。dispatcher 可以在连接网络后启动这些服务,并在网络关闭时停止它们。要使用这一功能, 需要启动 。
并且将脚本加到 目录。这些脚本必须属于 root, 否则不会被执行。为了安全起见, 用户组也设置为 root:

# chown root:root scriptname

而且脚本必须只能是拥有者可写, 否则不会被执行:

# chmod 755 scriptname

脚本将在连接网络时按字母表顺序运行,并在网络停止时反向停止。要保证启动顺序,可以在前面加数字,例如 或 这样就能保证 portmapper 在 NFS 挂载之前启动。

警告: 如果没有连接到外部网络,请注意启动的服务和需要它们的程序。如果连接公共网络时启动了错误的服务,可能导致安全问题。

避免超时

/etc/systemd/system/NetworkManager-dispatcher.service
.include /usr/lib/systemd/system/NetworkManager-dispatcher.service

RemainAfterExit=yes

运行修改后的 服务并将其设置为开机启动。

警告: 加入了 那一行后会让 dispatcher 一直运行。不幸的是, dispatcher 必须在再次运行脚本前被关闭。这意味着脚本只能被运行一次。因此, 除非超时确实引起了问题, 否则不要修改服务文件。

使用sshfs挂载远程文件夹

#!/bin/sh
USER='username'
REMOTE='user@host:/remote/path'
LOCAL='/local/path'

interface=$1 status=$2
if [ "$CONNECTION_UUID" = "uuid" ]; then
  case $status in
    up)
      export SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
      su "$USER" -c "sshfs $REMOTE $LOCAL"
      ;;
    down)
      fusermount -u "$LOCAL"
      ;;
  esac
fi

使用 dispatcher 在网络连接建立后连接 vpn

此部分示例演示如果自动连接到NetworkManager已定义的vpn-connection.首先创建调度脚本定义vpn连接之后的事务

1. 创建调度脚本
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="name of VPN connection defined in NetworkManager"
ESSID="Wi-Fi network ESSID (not connection name)"

interface=$1 status=$2
case $status in
  up|vpn-down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      nmcli con up id "$VPN_NAME"
    fi
    ;;
  down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      if nmcli con status id "$VPN_NAME" | grep -qs activated; then
        nmcli con down id "$VPN_NAME"
      fi
    fi
    ;;
esac

如果想在任意 Wi-Fi 网络都可以自动连接 VPN, 你可以用这样给 ESSID 赋值: 。记住要给脚本设置相应的权限, 参见 。

或者直接在 VPN 配置文件中加入 并写入密码:

 
 ....
 password-flags=0
 
 
 password=your_password

注意: 现在可能有必要重新打开 NetworkManager connection editor 并再次保存 VPN passwords/secrets。

代理设置

为使proxydriver设置代理,你需要在设置GNOME自动启动进程(
System->Preferences->Startup Applications):

xhost +si:localuser:your_username

参照: Proxy settings

systemctl mask NetworkManager
systemctl mask NetworkManager-dispatcher

Exact hits

Package network-manager

  • xenial (16.04LTS) (net):
    network management framework (daemon and userspace tools)

    1.2.6-0ubuntu0.16.04.3 : amd64 i386

    1.1.93-0ubuntu4 : arm64 armhf powerpc ppc64el s390x

  • xenial-updates (net):
    network management framework (daemon and userspace tools)

    1.2.6-0ubuntu0.16.04.3: amd64 arm64 armhf i386 powerpc ppc64el s390x

  • bionic (18.04LTS) (net):
    network management framework (daemon and userspace tools)

    1.10.6-2ubuntu1.1 : amd64 i386

    1.10.6-2ubuntu1 : arm64 armhf ppc64el s390x

  • bionic-updates (net):
    network management framework (daemon and userspace tools)

    1.10.6-2ubuntu1.4: amd64 arm64 armhf i386 ppc64el s390x

  • eoan (19.10) (net):
    network management framework (daemon and userspace tools)

    1.20.4-2ubuntu2: amd64 arm64 armhf i386 ppc64el s390x

  • eoan-updates (net):
    network management framework (daemon and userspace tools)

    1.20.4-2ubuntu2.3: amd64 arm64 armhf i386 ppc64el s390x

  • focal (20.04LTS) (net):
    network management framework (daemon and userspace tools)

    1.22.10-1ubuntu1: amd64 arm64 armhf ppc64el s390x

  • focal-updates (net):
    network management framework (daemon and userspace tools)

    1.22.10-1ubuntu2.1: amd64 arm64 armhf ppc64el s390x

  • groovy (net):
    network management framework (daemon and userspace tools)

    1.26.2-1ubuntu1: amd64 arm64 armhf ppc64el s390x

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *