Разное

Ubuntu пропинговать используя отдельный сетевой интерфейс: Настройка сети вручную | Русскоязычная документация по Ubuntu

Содержание

Настройка сетевого соединения Linux | Блог любителя экспериментов -Блог любителя экспериментов

Доброго времени, уважаемые читатели. Публикую вторую часть статьи о сетевой подсистеме Linux. В текущей части основной упор сделан на реализацию сети в Linux (как настроить сеть в Linux, как продиагностировать сеть в Linux и поддерживать в рабочем состоянии сетевую подсистему в Linux).

Настройка TCP/IP в Linux для работы в сети Ethernet

Для работы с сетевыми протоколами TCP/IP в Linux достаточно наличие только петлевого интерфейса, но если необходимо объединить хосты между собой, естественно, необходимо наличие сетевого интерфейса, каналов передачи данных (например витая пара), возможно, какого-либо сетевого оборудования. Так же, необходимо наличие установленных утилит для настройки сети (/sbin/ifconfig, /sbin/route и др.), обычно поставляемые в пакете net-tools. Так же необходимо наличие конфигурационных файлов для сети (например /etc/hosts) и поддержку сети ядром Linux.

Параметры сети

Начнем понимание сетевых механизмов Linux с ручного конфигурирования сети, то есть со случая, когда IP адрес сетевого интерфейса статичен. Итак, при настройке сети, необходимо учесть и настроить следующие параметры:

IP-адрес — как уже говорилось в первой части статьи — это уникальный адрес машины, в формате четырех десятичных чисел, разделенных точками. Обычно, при работе в локальной сети, выбирается из частных диапазонов, например: 192.168.0.1

Маска подсети — так же, 4 десятичных числа, определяющие, какая часть адреса относиться к адресу сети/подсети, а какая к адресу хоста. Маска подсети является числом, которое складывается (в двоичной форме) при помощи логического И, с IP-адресом и в результате чего выясняется, к какой подсети принадлежит адрес. Например адрес 192.168.0.2 с  маской 255.255.255.0 принадлежит подсети 192.168.0.

Адрес подсети — определяется маской подсети. При этом, для петлевых интерфейсов не существует подсетей.

Широковещательный адрес — адрес, используемый для отправки широковещательных пакетов, которые получат все хосты подсети. Обычно, он равен адресу подсети со значением хоста 255, то есть для подсети 192.168.0 широковещательным будет 192.168.0.255, аналогично, для подсети 192.168 широковещательным будет 192.168.255.255. Для петлевых интерфейсов не существует широковещательного адреса.

IP адрес шлюза — это адрес машины, являющейся шлюзом по-умолчанию для связи с внешним миром. Шлюзов может быть несколько, если компьютер подключен к нескольким сетям одновременно. Адрес шлюза не используется в изолированных сетях (не подключенных к глобальной сети), потому что данным сетям некуда отправлять пакеты вне сети, то же самое относиться и к петлевым интерфейсам.

IP-адрес сервера имен (DNS — сервера) — адрес сервера преобразующего имена хостов в IP адреса. Обычно, предоставляется провайдером.

Файлы настроек сети в Linux (конфигурационные файлы)

Для понимания работы сети в Linux, я бы обязательно посоветовал ознакомиться со статьей «Этапы загрузки Linux». В целом, вся работа Linux основана на процессе init, который рождается при загрузке ОС и плодит своих потомков, которые в свою очередь и выполняют всю необходимую работу, будь то запуск bash или демона. Да, и вся загрузка Linux основана на скриптах bash, в которых прописана вся последовательность запуска мелких утилит с различными параметрами, которые последовательно запускаются/останавливаются при запуске/остановке системы. Аналогично запускается и сетевая подсистема Linux.

Каждый дистрибутив Linux имеет слегка отличающийся от других механизм инициализации сети, но общая картина, думаю, после прочтения будет ясна. Если просмотреть стартовые скрипты сетевой подсистемы какого-либо дистрибутива Linux, то, как настроить конфигурацию сети с помощью конфигурационных файлов, станет более-менее понятно, например у Debian (за основу возьмем этот дистрибутив) за инициализацию сети отвечает скрипт /etc/init. d/networking, просмотрев который:

net-server:~#cat /etc/init.d/networking
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          networking
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# Should-Start:      ifupdown
# Should-Stop:       ifupdown
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Raise network interfaces.
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

[ -x /sbin/ifup ] || exit 0

. /lib/lsb/init-functions

process_options() {
    [ -e /etc/network/options ] || return 0
    log_warning_msg "/etc/network/options still exists and it will be IGNORED! Read README.Debian of netbase."
}

check_network_file_systems() {
    [ -e /proc/mounts ] || return 0

    if [ -e /etc/iscsi/iscsi.initramfs ]; then
        log_warning_msg "not deconfiguring network interfaces: iSCSI root is mounted. "
        exit 0
    fi

    exec 9<&0 < /proc/mounts
    while read DEV MTPT FSTYPE REST; do
        case $DEV in
        /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
            log_warning_msg "not deconfiguring network interfaces: network devices still mounted."
            exit 0
            ;;
        esac
        case $FSTYPE in
        nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)
            log_warning_msg "not deconfiguring network interfaces: network file systems still mounted."
            exit 0
            ;;
        esac
    done
    exec 0<&9 9<&-
}

check_network_swap() {
    [ -e /proc/swaps ] || return 0

    exec 9<&0 < /proc/swaps
    while read DEV MTPT FSTYPE REST; do
        case $DEV in
        /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
            log_warning_msg "not deconfiguring network interfaces: network swap still mounted. "
            exit 0
            ;;
        esac
    done
    exec 0<&9 9<&-
}

case "$1" in
start)
        process_options

        log_action_begin_msg "Configuring network interfaces"
        if ifup -a; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;

stop)
        check_network_file_systems
        check_network_swap

        log_action_begin_msg "Deconfiguring network interfaces"
        if ifdown -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;

force-reload|restart)
        process_options

        log_warning_msg "Running $0 $1 is deprecated because it may not enable again some interfaces"
        log_action_begin_msg "Reconfiguring network interfaces"
        ifdown -a --exclude=lo || true
        if ifup -a --exclude=lo; then
            log_action_end_msg $?
        else
            log_action_end_msg $?
        fi
        ;;

*)
        echo "Usage: /etc/init. d/networking {start|stop}"
        exit 1
        ;;
esac

exit 0

можно найти несколько функций, проверяющих наличие подключенных сетевых файловых систем (check_network_file_systems(), check_network_swap()), а так же проверку существования какого-то пока непонятного конфига /etc/network/options (функция process_options()),  а в самом низу, конструкцией case «$1» in проверяется первый параметр переданный скрипту и в соответствии с введенным параметром (start/stop/force-reload|restart или любое дугое) производит определенные действия. Из этих самых «определенных действий«, на примере аргумента start видно, что сначала запускается функция process_options, далее отправляется в лог фраза Configuring network interfaces, и запускается команда ifup -a. Если посмотреть man ifup, то видно что данная команда читает конфиг из файла /etc/network/interfaces и согласно ключу -a запускает все интерфейсы имеющие параметр auto.

The ifup and ifdown commands may be used to configure (or, respectively, deconfigure) network interfaces based on interface definitions in the file /etc/network/interfaces.

-a, —all
If given to ifup, affect all interfaces marked auto. Interfaces are brought up in the order in which they are defined in /etc/network/interfaces. If given to ifdown, affect all defined interfaces. Interfaces are brought down in the order in which they are currently listed in the state file. Only interfaces defined in /etc/network/interfaces will be brought down.

Соответственно, прочитав  man interfaces (rus) или man interfaces (eng) , становиться ясно, как же в Debian настроить какой-либо сетевой интерфейс с помощью конфига /etc/network/interfaces. Ниже, пример данного конфигурационного файла для 3х интерфейсов: петлевой (lo), со статичным IP (eth3) и IP получаемым по dhcp (eth0):

ip-server:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them.  For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug eth3
iface eth3 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    gateway 192.168.1.254
    broadcast 192.168.1.255

В данном конфиге строки allow-hotplug и auto — это синонимы и интерфейсы будут подняты по команде ifup -a. Вот, собственно, и вся цепь работы сетевой подсистемы. Аналогично, в других дистрибутивах: в RedHat и SUSE сеть запускается скриптом /etc/init.d/network. Рассматрев его, аналогично можно найти, где лежит конфигурация сети.

/etc/hosts

Данный файл хранит перечень IP адресов и соответствующих им (адресам) имен хостов.Формат файла ничем не отличается от мастдайного:

ip-server:~# cat /etc/hosts
 # ip        host. in.domain host
 127.0.0.1       localhost
 127.0.1.1       ip-server.domain.local  ip-server
 192.168.1.1     ip-server.domain.local  ip-server

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

/etc/hostname

Данный файл содержит NetBIOS-имя хоста:

ip-server:~# cat /etc/hostname
ip-server

/etc/networks

Данный файл хранит имена и адреса локальной и других сетей. Пример:

ip-server:~# cat /etc/networks
default         0.0.0.0
loopback        127.0.0.0
link-local      169.254.0.0
home-network    192.168.1.0

При использовании данного файла, сетями можно управлять по имени. Например добавить маршрут не route add 192. 168.1.12, а route add home-network.

/etc/nsswitch.conf

Файл определяет порядок поиска имени хоста/сети, за данную настройку отвечают строки:

Для хостов:
 hosts:          files dns
Для сетей:
 networks:       files

Параметр files указывает использовать указанные файлы (/etc/hosts и /etc/networks соответственно), параметр dns указывает использовать службу dns.

/etc/host.conf

Файл задает параметры разрешения имен для резолвера

ip-server:~# cat /etc/host.conf
multi on

Данный файл  указывает библиотеке resolv — возвращать  все  допустимые адреса  узла, которые встретились в файле /etc/hosts, а не только первый из них.

/etc/resolv.conf

Данный фал определяет параметры механизма преобразования сетевых имен в IP адреса. Простым языком, определяет настройки DNS. Пример:

ip-server:~# cat /etc/resolv.conf
nameserver 10.0.0.4
nameserver 10.0.0.1
search domain.local

Первые 2 строчки указывают сервера DNS. Третья строка указывает домены поиска. Если при разрешении имени, имя не будет FQDN-именем, то данный домен подставиться в виде «окончания». Например при выполнении команды ping host, прингуемый адрес преобразуется в host.domain.local. Остальные параметры можно почитать в man resolv.conf. Очень часто, в Linux используется динамическая генерация данного файла, с помощью т.н. программы /sbin/resolvconf. Данная программа является посредником между службами, динамически предоставляющими сервера имен (например DHCP client) и службами, использующими данные сервера имен. Для того чтобы использовать динамически генерируемый файл /etc/resolv.conf, необходимо сделать данный файл символической ссылкой на /etc/resolvconf/run/resolv.conf. В некоторых дистрибутивах путь может быть другой, об этом обязательно будет написано в man resolvconf.

Настройка сети

Ознакомившись с основными конфигурационными файлами, можно посмотреть на команды управления сетью. Выше уже говорилось о команде ifup, ifdown, но данные средства не совсем универсальны, допустим в дистрибутивах RH данных команд по умолчанию нет. Кроме того, в новых дистрибутивах появилось новое высокоуровневое средство управления сетью — команда ip, которая принадлежит пакету iproute. Ему (пакету iproute) я посвящу отдельный пост. А в текущем посте я его рассматривать не буду. Команды, описываемые ниже принадлежат пакету net-tools.

Итак, чтобы быть уверенным в работоспособности команды в любом дистрибутиве Linux, необходимо пользоваться двумя основными командами-старичками. Это ifconfig, route и arp. Первая команда (ifconfig) отвечает за настройку сетевых интерфейсов (ip, маска, шлюз), вторая (route) — настройка маршрутизации, третья (arp) — управление arp-таблицей.   Хочется заметить, что выполнение данных команд без отключения стандартного скрипта запуска SystemV сетевой подсистемы внесет изменения только до первой перезагрузки/перезапуска сетевой службы, т.к. если пораскинуть мозгами, то можно понять, что скрипт /etc/init.d/networking при очередном запуске перечитает указанные выше конфиги и применит старые настройки. Соответственно, выход для постоянной установки настроек — либо команда ifconfig с соответствующими параметрами — вписать в rc.local, либо поправить руками соответствующие конфиги сетевых интерфейсов.

Так же, если выполняется команда ifconfig с недостающими параметрами (например только IP адрес), то остальные дополняются автоматически (например бродкаст адрес добавляется по умолчанию с хостовым адресом, оканчивающимся на 255 и маска подсети по умолчанию берется 255.255.255.0).

Маршрутизация для имеющихся интерфейсов в современных ядрах всегда поднимается автоматически силами ядра. Вернее сказать, прямые маршруты в сеть согласно настроек IP и подсети, в которую смотрит поднятый интерфейс формируются автоматически, силами ядра. Поле gateway (шлюз) для таких записей показывает адрес выходного интерфейса или *. В старых версиях ядра (номер ядра с которого маршруты стали подниматься автоматом — не подскажу ) необходимо было добавлять маршрут вручную командой route.

Если есть необходимость организовать свои маршруты, то необходимо воспользоваться командой route. Данной командой можно добавлять и удалять маршруты, но опять же, это поможет только до перезапуска /etc/init.d/networking (или другого скрипта, отвечающего за сеть в Вашем дистрибутиве). Чтобы маршруты добавлялись автоматом, необходимо так же, как и с командой ifconfig — добавить команды добавления маршрутов в rc.local, либо поправить руками соответствующие конфиги сетевых интерфейсов (например в Deb — /etc/network/options).

По каким правилам формируются маршруты к сетям, я в первой части, на примерах нескольких маршрутизируемых сетей.

Диагностика сети Linux

Существует большое количество инструментов диагностики сети в Linux, зачастую, они очень похожи на утилиты от Microsoft. Я рассмотрю 3 основные утилиты диагностики сети, без которых выявить неполадки будет проблематично.

ping

Думаю, что данная утилита знакома чуть ли не каждому. Работа этой утилиты заключается в отправке т.н. пакетов ICMP удаленному серверу, который будет указан в параметрах команды, сервер возвращает отправленные команды, а ping подсчитывает время требуемое отправленному пакету, чтобы дойти до сервера и вернуться. Например:

[root@proxy ~]# ping ya.ru
PING ya.ru (87.250.251.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=1 ttl=57 time=42.7 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=2 ttl=57 time=43.2 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=3 ttl=57 time=42.5 ms
64 bytes from www. C
--- ya.ru ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4012ms
rtt min/avg/max/mdev = 41.922/42.588/43.255/0.500 ms

Как видно, из приведенного примера, ping выводит нам кучу полезной информации. Прежде всего, мы выяснили, что можем установить соединение с хостом ya.ru (иногда говорят, что «хост ya.ru нам доступен»). Во-вторых, мы видим, что DNS работает корректно, потому что «пингуемое» имя было корректно преобразовано в IP адрес (PING ya.ru (87.250.251.3)). Далее, в поле icmp_seq= указана нумерация отправляемых пакетов. Каждому отправляемому пакету последовательно присваивается номер и если в данной нумерации будут «провалы», то это нам расскажет о том, что соединение с «пингуемым» неустойчиво, а так же может означать, что сервер, которому шлют пакеты перегружен. По значению time= мы видим, сколько времени пакет путешествовал до 87. 250.251.3 и обратно. Остановить работу утилиты ping можно клавишами Ctrl+C.

Так же, утилита ping интересна тем, что может позволить увидеть, где именно возникли неполадки. Допустим, утилита ping выводит сообщение network not reachable (сеть недоступна), либо другое аналогичное сообщение. Это, скорее всего, говорит о некорректной настройке вашей системы. В таком случае, можно послать пакеты по IP-адресу провайдера, чтобы понять, в каком месте возникает проблема (между локальным ПК или «дальше»). Если Вы подключены к интернету через маршрутизатор, то можно послать пакеты по его IP. Соответственно, если проблема проявиться уже на этом этапе, это говорит, о неправильном конфигурировании локальной системы, либо о повреждении кабеля, если маршрутизатор отзывается, а сервер провайдера нет, то проблема — в канале связи провайдера и т.д. Наконец, если неудачей завершилось преобразовании имени в IP, то можно проверить связь по IP, если ответы будут приходить корректно, то можно догадаться, что проблема в DNS.

Следует отметить, что данная утилита не всегда надежный инструмент для диагностики. Удаленный сервер может блокировать ответы на ICMP запросы.

traceroute

Простым языком, команда называется трассировка маршрута. Как можно понять из названия — данная утилита покажет по какому маршруту шли пакеты до хоста. Утилита traceroute несколько похожа на ping, но отображает больше интересной информации. Пример:

[root@proxy ~]# traceroute ya.ru
traceroute to ya.ru (213.180.204.3), 30 hops max, 60 byte packets
 1  243-083-free.kubtelecom.ru (213.132.83.243)  6.408 ms  6.306 ms  6.193 ms
 2  065-064-free.kubtelecom.ru (213.132.64.65)  2.761 ms  5.787 ms  5.777 ms
 3  lgw.kubtelecom.ru (213.132.75.54)  5.713 ms  5.701 ms  5.636 ms
 4  KubTelecom-lgw.Krasnodar.gldn.net (194.186.6.177)  81.430 ms  81.581 ms  81.687 ms
 5  cat26.Moscow.gldn.net (194.186.10.118)  47.789 ms  47.888 ms  48.011 ms
 6  213. 33.201.230 (213.33.201.230)  43.322 ms  41.783 ms  41.106 ms
 7  carmine-red-vlan602.yandex.net (87.250.242.206)  41.199 ms  42.578 ms  42.610 ms
 8  www.yandex.ru (213.180.204.3)  43.185 ms  42.126 ms  42.679 ms

Как видно, можно проследить маршрут от маршрутизатора провайдера 243-083-free.kubtelecom.ru (213.132.83.243) (Юг россии) до конечного хоста в www.yandex.ru (213.180.204.3)  в москве.

dig

Данная утилита посылает запросы серверам DNS и возвращает информацию о заданном домене. Пример:

[root@proxy ~]# dig @ns.kuban.ru roboti.ru

; <<>> DiG 9.3.6-P1 <<>> @ns.kuban.ru roboti.ru
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64412
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;roboti.ru.                     IN      A

;; ANSWER SECTION:
roboti. ru.              448     IN      A       72.52.4.90

;; AUTHORITY SECTION:
roboti.ru.              345448  IN      NS      ns1.sedoparking.com.
roboti.ru.              345448  IN      NS      ns2.sedoparking.com.

;; Query time: 102 msec
;; SERVER: 62.183.1.244#53(62.183.1.244)
;; WHEN: Thu Feb 17 19:44:59 2011
;; MSG SIZE  rcvd: 94

Команда dig послала запрос серверу DNSns.kuban.ru (@ns.kuban.ru — данный параметр указывать не обязательно, в таком случае источником информации о DNS будет взят сервер из настройки вашей системы) о доменном имени roboti.ru. В результате чего, получила ответ, в котором мы можем увидеть в разделе ANSWER SECTION информацию об IP адресах домена, в разделе AUTHORITY SECTION информацию о т.н. авторитетных DNS серверах. Третья строка снизу говорит нам о том, какой сервер предоставил ответ.

Другие утилиты диагностики

ping, dig и другие утилиты диагностики с параметрами, можно найти в посте Основные команды Linux: сеть.

Подключение новой сетевой карты

Подключение и запуск новой сетевой карты сводится к выполнению нескольких шагов:

1. Физическое подключение карты

2. Запуск Linux

3. Просмотр вывода dmesg на обнаружение системой новой сетевой карты:

Посмотрим вывод ДО подключения новой карты:

server:~# dmesg | grep eth
[    4.720550] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
[    5.130191] e1000: eth2: e1000_probe: Intel(R) PRO/1000 Network Connection
[   15.285527] e1000: eth3: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   15.681056] e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX

в выводе видно, что в системе есть 2 сетевые карты eth2 и eth3. Подключаем третью и смотрим вывод:

server:~# dmesg | grep eth
[    4.720513] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
[    5. 132029] e1000: eth2: e1000_probe: Intel(R) PRO/1000 Network Connection
[    5.534684] e1000: eth3: e1000_probe: Intel(R) PRO/1000 Network Connection
[   39.274875] udev: renamed network interface eth3 to eth4
[   39.287661] udev: renamed network interface eth2_rename_ren to eth3
[   45.670744] e1000: eth3: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   46.237232] e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   96.977468] e1000: eth4: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX

В dmesg мы видим, что появилась новая сетевушка — eth4, которая на самом деле — eth3, но переименована менеджером устройств udev в eth4, а eth3 — это на самом деле переименованная eth2 (об udev мы поговорим в отдельном посте). Появление нашей новой сетевой в dmesg нам говорит, что сетевая карта поддерживается ядром и корректно определилась. Осталось дело за малым — настроить новый интерфейс в /etc/network/interfaces (Debian), потому что данная карта не была инициализирована стартовым скриптом /etc/init.d/network. ifconfig данную карту видит:

server:~# ifconfig eth4
eth4      Link encap:Ethernet  HWaddr 08:00:27:5f:34:ad
          inet6 addr: fe80::a00:27ff:fe5f:34ad/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:311847 errors:0 dropped:0 overruns:0 frame:0
          TX packets:126 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:104670651 (99.8 MiB)  TX bytes:16184 (15.8 KiB)

но опять же — не конфигурирует. Как конфигурировать сетевую карту говорилось выше.

Резюме

Думаю, на сегодня это все. Когда начал писать данную статью, думал что впишусь в один пост, но он получился громаден. Посему было решено разбить статью на две. Итого, я постарался изложить, не пошаговое хауту по настройке сети, а изложить принцип и объяснить понимание того, как же запускается и работает сеть в Linux. Очень надеюсь, что мне это удалось. Буду рад вашим комментариями и дополнениям. Со временем, буду статью дополнять.

Что еще почитать по теме?

Настройка DHCP сервера на Linux
Настройка NTP сервера на Linux на основе ntpd
Вито Амато «Основы организации сетей Cisco» Том1 и Том2 2004г.

Upd 2011.11.27: добавил файл конфигурации host.conf

С Уважением, Mc.Sim!


Другие материалы в категории Сети


Теги: interfaces, ip, Linux, network, загрузка, команды, основы

Настройка сетевых интерфейсов в CentOS 8/7

В данной статье мы рассмотрим способы настройки сети в системах Linux CentOS 7/8, покажем, как настраивать сетевых интерфейсов через конфигурационные файлы, основные утилиты для настройки сети и многое другое. Это актуальная тема, так как изначально настройка любого сервера начинается с настройки на нем сети.

В статье мы покажем особенности настройки сети в CentOS 7 с помощью стандартного сервиса network. Посмотрим, как использовать для настройки сети NetworkManager (NM), который предлагается по-умолчанию в CentOS 8.

Именование сетевых интерфейсов в CentOS

Классическая схема именования сетевых интерфейсов в Linux присваивает имена eth0, eth2 и так далее по порядку. Но эти имена не привязываются жестко к интерфейсам и после перезагрузки при наличии нескольких сетевых интерфейсов, эти имена могут поменяться. Это может доставлять некоторые проблемы, при настройке, например, межсетевого экрана через firewalld или iptables. В связи с этим начиная с RedHat 7 и CentOS 7, решено было назначать имена сетевых интерфейсов на основе иерархии различных схем именования. По умолчанию systemd будет поочередно применять схемы именования, остановившись на первой доступной и применимой. Имена присваиваются в автоматическом режиме, остаются неизменными даже если аппаратные средства добавлены или изменены. С другой стороны, такие имена интерфейсов менее читабельны, например, enp5s0 или ens3, чем традиционные eth0 и eth2.

Можно вернуться к стандартному имени интерфейса Linux с помощью следующих действий.

Отредактируйте файл /etc/default/grub:

# nano /etc/default/grub

В строку GRUB_CMDLINE_LINUX нужно добавить:

net.ifnames=0 biosdevname=0

Пример полной строки:

GRUB_CMDLINE_LINUX="consoleblank=0 fsck.repair=yes crashkernel=auto nompath selinux=0 rhgb quiet net.ifnames=0 biosdevname=0"

Обновите конфигурацию grub:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Переименуйте конфигурационный файл сетевого интерфейса:

# mv /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-eth0

И заменить значение DEVICE:

Сохраните файл, перезагрузите сервер и проверьте все ли в порядке:

# ip a

Интерфейс теперь называется eth0.

Первоначальная настройка сети при установке CentOS

Изначально при установке CentOS Linux, вы можете настроить сетевой интерфейс в графическом режиме в пункте меню “Network & Hostname”. В данном пункте вы указываете имя сервера, добавляете нужный IP адрес и шлюз, DNS и многое другое. Более подробную настройку на данном шаге, вы можете посмотреть в статье по ссылке выше.

Ручная настройка конфигурационного файла сетевого интерфейса в CentOS

Выведем список доступных сетевых интерфейсов в системе:

# ip a

Файлы конфигурации сети вашего сервера хранятся в каталоге /etc/sysconfig/network-scripts. Эти файлы создает демон NetworkManager для каждого сетевого интерфейса. В нашем случае файл конфигурации называется ifcfg-eth0 (у вас может отличаться в зависимости от схемы именования сетевого интерфейса).

Рассмотрим основные параметры:

  • DEVICE – имя сетевого адаптера, совпадает с именем в системе, у нас это eht0
  • BOOTPROTO – способ назначения IP-адреса (static — статическое значение, указываем в ручную. dhcp — получить адрес автоматически)
  • IPADDR – IP-адрес
  • NETMASK – маска подсети
  • GATEWAY – шлюз по умолчанию
  • DNS1 – Основной DNS-сервер
  • DNS2 — альтернативный DNS-сервер
  • ONBOOT — способ запуска сетевого интерфейса (yes – автоматически, no – вручную)
  • UUID – уникальный идентификатор сетевого интерфейса. Можно сгенерировать самостоятельно командой uuidgen.
  • IPV4_FAILURE_FATAL – отключение сетевого интерфейса с IP-адресом v4, если он имеет неверную конфигурацию (yes – отключить, no – не отключать)
  • IPV6_FAILURE_FATAL – отключение сетевого интерфейса с IP-адресом v6, если он имеет неверную конфигурацию (yes – отключить, no – не отключать)
  • IPV6_AUTOCONF – разрешает или запрещает автоконфигурирование Ipv6 с помощью протокола
  • IPV6_INIT – включение возможности использования адресации Ipv6(yes – адресация может использоваться, no – не используется)
  • PEERROUTES – устанавливает приоритет настройки шлюза по умолчанию, при использовании DHCP
  • IPV6_PEERROUTES — устанавливает приоритет настройки шлюза по умолчанию, при использовании DHCP для IPv6

Исходя из этой информации, настроим сетевой интерфейс.

Настройка статического IP адреса в CentOS

Откроем файл для редактирования:

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

В этом примере я указал статический IP адрес, маску подсети, шлюз и несколько DNS серверов. Включаем автозапуск интерфейса:

ONBOOT=”yes”

После всех модификаций, нужно выполнить рестарт сервиса network. Если все в порядке, вы получите такой листинг:

[root@server network-scripts]# service network restart

Restarting network (via systemctl): [ OK ]

Также можно просто перезапустить все профили подключений :

# nmcli connection reload

Получение динамического IP адреса для интерфейса через DHCP

Если ваш сервер должен получить IP адрес от DHCP севера, откройте конфигурационный файл интерфейса и измените настройки:

То есть мы убрали все настройки, связанные с IP-адресами и маской, а так же поменяли способ назначения IP-адреcа на dhcp (BOOTPROTO=”dhcp”). После всех изменений, не забываем выполнять перезагрузку network.

Как отключить IPv6 в CentOS?

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

# netstat -tulnp

У меня сервер тестовый, поэтому ipv6 используется только для sshd и cronyd. Это можно определить по “:::”.

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

# mcedit /etc/ssh/sshd_config

И раскомментируйте строки:

#AddressFamily any
#ListenAddress 0.0.0.0

После чего перезапустите сервис:

Как видим, для sshd протокол ipv6 теперь недоступен. Проделайте аналогичные настройки со всеми сервисами.

Перейдем к отключению протокола ipv6 в настройках сети. Откройте файл /etc/sysctl.conf:

# nano /etc/sysctl.conf И добавьте туда следующие строки:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Сохраните файл и примените через:

[root@server ~]# sysctl -p

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Перейдем к файлу /etc/sysconfig/network. Добавьте в него следующую конфигурацию:

NETWORKING_IPV6=no
IPV6INIT=no

Из файла конфигурации сетевого интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 удалите строку:

IPV6INIT="yes"

И наконец добавим запрет на работу ipv6 в grub:

# nano /etc/default/grub

В конец строки GRUB_CMDLINE_LINUX, добавляем:

ipv6. disable=1

После всех настроек, сохраните файл и обновите grub:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Выполните перезагрузку сервера и проверьте конфигурацию сети:

[root@server ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 185.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255
ether 52:54:00:d3:1c:3e txqueuelen 1000 (Ethernet)
RX packets 10068 bytes 613092 (598.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 5399 (5.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Протокол ipv6 на сервере отключен.

Как указать DNS сервера для сетевого интерфейса в CentOS?

Настроить DNS-сервера для вашего сервера, вы можете с помощью файла /etc/resolv. conf или указать их в настройках сетевого интерфейса. При настройке static конфигурации для сетевого интерфейса, мы уже указывали DNS-сервера, через параметры:

DNS1=
DNS2=
DNS3=

Установите нужные вам DNS-сервера и перезагрузите сервис network.

В файл /etc/resolv.conf, DNS-сервера прописываются автоматически при перезагрузке сервера, забирая их с файла конфигурации сети. Если же вы не указали DNS-сервера при настройке сети, пропишите их вручную в файл /etc/resolv.conf:

nameserver 77.88.8.8
nameserver 8.8.8.8
nameserver 8.8.4.4

Как настроить несколько IP адресов на одном сетевом интерфейсе CentOS?

Если вам нужно использовать несколько IP-адресов на одном сетевом интерфейсе, настройку можно выполнить через алиас интерфейса или же добавив дополнительный IP-адрес в основной файл конфигурации.

# nano /etc/sysconfig/network-scripts/ifcfg-eth0

И измените его следующим образом:

# Generated by parse-kickstart
UUID="b8bccd4c-fb1b-4d36-9d45-044c7c0194eb"
IPADDR1="*. *.*.*"
IPADDR2="*.*.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
DNS1=77.88.8.8
DNS2=8.8.8.8
DNS3=8.8.4.4

Где:

IPADDR1 — первый IP-адрес

IPADDR2 — второй IP-адрес

GATEWAY — основной шлюз

Либо создайте alias к вашему основному файлу конфигурации:

# nano /etc/sysconfig/network-scripts/ifcfg-eth0:1

И добавьте несколько строк, без основного шлюза:

После всех настроек нужно выполнить перезапуск сети:

[root@server network-scripts]# service network restart

Restarting network (via systemctl): [ OK ]

В Windows тоже можно настроить несколько IP адресов (алиасов) на одном интерфейсе.

Настройка VLAN (802.1Q) в CentOS

Подробнее о настройке нескольких VLAN для одного сетевого интерфейса в CentOS мы говорили в статье: Настройка VLAN на сетевом интерфейсе в CentOS.

Настройка нескольких сетевых интерфейсов в CentOS

Если у вас на сервере несколько сетевых интерфейсов, для них можно указать разные IP-адреса. Разберемся как это сделать. Если у вас на сервере более одного сетевого интерфейса, команда “ip a” должна отобразить эту информацию:

[root@server ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:d3:1c:3e brd ff:ff:ff:ff:ff:ff
inet 185.*.*.*/16 brd 185.*.*.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:54:00:5f:f3:b8 brd ff:ff:ff:ff:ff:f

Чтобы сконфигурировать второй интерфейс, нужно создать для него файл:

# nano /etc/sysconfig/network-scripts/ifcfg-eth2

И добавьте следующую конфигурацию:

IPADDR="*. *.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth2"
ONBOOT="yes"

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

[root@server ~]# netstat -nr

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 185.*.*.1 0.0.0.0 UG 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth2
185.*.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
185.*.*.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2

В качестве основного шлюза у нас выступает интерфейс eth2. Я же хочу использовать eth0, для этого изменим его:

# route add default gw *.*.*.* – заменяем шлюз на тот, который указан в сетевом интерфейсе eth0

# route delete default gw *.*.*.* — удаляем шлюз интерфейса eth2

Если вы хотите, чтобы данная настройка сохранилась после перезагрузки сервера, добавьте эти команды в rc. local (см. статью об автозагрузке сервисов в CentOS).

Полезные команды по работе с сетью в CentOS

  • ifdown eth2 — отключить указанный сетевой интерфейс.
  • ifup eth2 – поднять указанный сетевой интерфейс.
  • ifconfig – проверить информацию о всех интерфейсах.
  • ifconfig -a | grep ether | gawk '{print $2}' — команда для вывода MAC-адресов интерфейсов
  • ip a | grep ether | gawk '{print $2}' — тоже самое, только через утилиту ip a
  • service network restart или systemctl restart network – перезапустить сервис network с помощью systemctl
  • systemctl restart NetworkManager.service – перезапустить NM
  • ip route или ip route show — посмотреть таблицу маршрутизации (https://winitpro.ru/index.php/2020/04/13/nastrojka-marshrutov-v-linux/)
  • ping host – пропинговать указанный хост
  • whois domain – получить информацию whois для домена
  • dig domain – получить DNS информацию о домене

Утилиты администрирования сети в CentOS

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

# yum install net-tools -y

После установки, можно воспользоваться утилитой ifconfig:

[root@server ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 185.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255
inet6 fe80::5054:ff:fed3:1c3e prefixlen 64 scopeid 0x20<link>
ether 52:54:00:d3:1c:3e txqueuelen 1000 (Ethernet)
RX packets 2189424 bytes 144208326 (137.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2350 bytes 260486 (254.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Как видим, имя нашего сетевого интерфейса eth0.

Без установки пакета net-tools, вы можете проверить ваши интерфейсы с помощью следующей команды:

# ip a

Результат будет практически тот же:

Управление сетью с помощью NetworkManager в CentOS 8

В CentOS 8 для настройки сети рекомендуется использовать только NetworkManager. Эта служба управление сетевыми подключениями, контролирует настройки и применяет изменения к сетевым адаптерам.

Чтобы проверить статус NM, используйте команду:

# systemctl status NetworkManager.service

В CentOS предлагается использовать для настройки сети командную консоль nmcli или графическую утилиту nmtui.

Чтобы перейти в режим настройк сети, введите команду:

# nmtui

При выборе первого пункта, у вас откроется окно с выбором сетевого интерфейса для редактирования:

Выбираем нужный нам интерфейс и редактируем:

Нам доступно редактирование имени, IP-адреса, Шлюза, DNS-серверов. Так же в интерактивном меню NM, мы можем изменить способ назначения IP адреса, на DHCP:

Замените “manual” на “automatic”:

После чего сохраните настройки. С помощью nmtui в графическом режиме, вы можете выполнить любые настройки, которые выполняете вручную через конфигурационные файлы. Если вы предпочитаете использовать командную строку для настройки интерфейсов, можете использовать nmcli. Например, следующие команды изменят IP адрес, щлюз и DNS сервера для интерефейса eth2.

# nmcli con mod eth2 ipv4.addresses 192.168.10.14/24
# nmcli con mod eth2 ipv4.gateway 192.168.10.1
# nmcli con mod eth2 ipv4.dns "8.8.8.8"

Для применения изменений, перезагрузите интерфейс:

# nmcli con up eth2

Если же вам удобнее работать с файлами конфигурации, установите через yum отдельный пакет network-scripts (в CentOS 8 по умолчанию его нет):

# yum install network-scripts -y

Upgraded:
initscripts-10.00.1-1.el8_0.1.x86_64
Installed:
network-scripts-10.00.1-1.el8_0.1.x86_64 network-scripts-team-1.27-10.el8.x86_64
Complete!

После установки данного пакета, вы можете редактировать настройки сети, как мы описывали ранее, через конфигурационные файлы:

Как проверить пинг в Ubuntu

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

При установке Ubuntu автоматически устанавливается и интегрированная Ping-программа. Для ее вызова существует два варианта команд Ping: «ping» для Ipv4-адресов и «ping6» для Ipv6-адресов.

При вводе команды Ping можно выбрать разные опции

Параметры этой команды одинаковы для обоих вариантов. Соответственно, в следующих примерах вы можете заменить «ping» на «ping6».

Задайте команду «ping» в терминале Ubuntu, чтобы отправить запрос серверу или компьютеру. Команда выглядит следующим образом: «ping Опция IP-адрес», где «Опцию» вы заменяете на выбранный вами параметр и вводите необходимый IP-адрес.

Вместо IP-адреса можно также ввести имя хоста. Если вы захотите, например, пропинговать ichip.ru, то команда будет выглядеть следующим образом: «ping Опция ichip.ru», где слово «Опция» необходимо изменить на нужный параметр.

При вводе команды Ping можно выбрать разные опции

Ограничить число: Если вы хотите ограничить число пинг-запросов, для этого понадобится опция «-c». Сразу за ней надо ввести количество запросов. Пример: «ping -c 3 ichip.ru».

Завершение: С помощью опции «-w» и числа, стоящего за ней, можно задать время, по истечении которого ping завершится. При этом не имеет значения, на сколько запросов за это время были получены ответы. Пример: «ping -w 15 ichip.ru».

Тайм-аут: Опция -W указывает, что Ping ожидает ответа только указанное время. Если ответ на запрос не будет получен за это время, Ping будет прерван. Пример: «ping -W 5 ichip.ru».

Интервал: Без указания этой опции Ping отправляет запросы с интервалом в одну секунду. Этот интервал можно задать самостоятельно с помощью опции «-i». Пример: «ping -i 5 ichip.ru».

Интерфейс: Опцию «-I» можно использовать для определения интерфейса, через который будут отправляться запросы.

Читайте также:

Фото: Ubuntu,

Что делать, если сервер недоступен по сети

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

Проверка пинга

Запустить ping с вашего ПК до IP-адреса вашего сервера можно, например, через CMD: командная строка Windows (ПускВсе программыСтандартныеКомандная строка)

Если пинг проходит корректно, то вы увидите статистику переданных пакетов и время ответа,  как на скриншоте:

В противном случае появится сообщение об ошибке, что говорит о сетевой недоступности, либо о проблемах с соединением:

Далее нужно зайти на сам сервер и проверить пинг с сервера до внешних ресурсов, перейдите в панель VMmanager и найдите в верхнем меню значок VNC.

Если вы используете VMmanager 6, то нажмите на кнопку VNC во вкладке Виртуальные машины.

В окне VNC необходимо авторизоваться и запустить ping  до любого адреса, например 8.8.8.8. Если сеть работает, то вы увидите количество переданных пакетов и время, за которое они достигли конечного адреса. Если нет, то придут сообщения вида network unreacheble, connection timeout, либо команда будет просто «висеть» без вывода.

Так как ping не проходит, это говорит о том, что не работает сеть. Поэтому переходим к следующему шагу и идём проверять, в чём может быть проблема.

Проверка сетевых настроек сервера

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

Диагностика проблем сети с помощью утилиты ip

Диагностировать проблему нам поможет утилита ip — она покажет имя, статус сетевого интерфейса и IP-адреса, которые ему назначены. Утилита установлена во всех современных linux-дистрибутивах.

На сервере с корректными настройками вывод будет таким:

root@support:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c8:e6:45 brd ff:ff:ff:ff:ff:ff
    inet 149.154.66.7 peer 10.0.0.1/32 brd 149.154.66.7 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:230:2::d98/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fec8:e645/64 scope link
       valid_lft forever preferred_lft forever

В этом случае, нас интересует блок с названием нашего сетевого интерфейса — в этом случае eth0 (на разных ОС может называться по-разному, например, ens3, eno1).

Здесь прописан наш IP-адрес, маска и шлюз, что можно увидеть в строке:

inet 149.154.66.7 peer 10.0.0.1/32 brd 149.154.66.7 scope global eth0

На наших серверах используется технология VPU, поэтому в качестве сетевого шлюза на серверах  используется адрес 10.0.0.1, а маска подсети /32

Также следует обратить внимание на статус интерфейса. Если его статус DOWN, а не UP, то стоит попробовать запустить интерфейс вручную командой if up eth0, где вместо eth0 укажите имя вашей сетевой карты. Ранее мы рассмотрели, где можно его найти.

На этом примере видно, что интерфейс не «поднимается» из-за синтаксических ошибок в конфигурационном файле сетевых настроек /etc/network/interfaces.

Также стоит проверить статус службы Network командой systemctl status networking. Если она не запущена, то стоит её запустить командой systemctl start networking. Если служба не запустилась, то, возможно, имеется ошибка в конфигурации, о чём будет сообщено в выводе команды запуска. Вам нужно обратить внимание на строку, которая начинается с Active. Обычно статус запуска службы выделен цветом:  красным в случае ошибки и зелёным, если запуск был успешен — как на скриншотах ниже:

Далее проверяем маршруты. Даже если сетевой интерфейс работает и IP указан верно, без двух маршрутов сеть работать не будет.

Должен быть прописан путь до 10.0.0.1 и он же установлен по умолчанию (дефолтным), как здесь:

root@support:~# ip r
default via 10.0.0.1 dev eth0 onlink
10.0.0.1 dev eth0 proto kernel scope link src 149.154.66.7

Если сеть не заработала, проверяем пинг до шлюза 10.0.0.1 — если он проходит, возможно, проблемы на стороне хостинг-провайдера. Напишите нам в поддержку, разберёмся. 

Проверка фаервола

Возможен вариант, что сеть настроена корректно, но трафик блокируется фаерволом внутри самого VDS.

Чтобы это проверить, первым делом смотрим на политики по умолчанию.
Для этого вводим iptables-save и смотрим на первые несколько строк вывода.

В начале мы увидим политику по умолчанию для соединений (цепочек) INPUT, OUTPUT, FORWARD — то есть правила для всех входящих, исходящих и маршрутизируемых соединений. Они имеют статус DROP либо ACCEPT.

Когда все соединения с сервера заблокированы, они имеют статус DROP, и вывод выглядит так:

Чтобы исключить влияние фаервола, просматриваем текущие правила с помощью iptables-save и сохраняем их в отдельный файл командой: 

iptables-save > rules.tmp

Меняем все политики по умолчанию на ACCEPT и сбрасываем все текущие правила командами:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

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

iptables-restore < rules.tmp

Проверка влияния ПО

Возможен вариант, что установленные на сервере программы (особенно связанные с изменением маршрутизации на сервере, например, OpenVPN, Docker, PPTP) «ломают» работу сети. Чтобы исключить влияние установленного на сервер ПО, можно запустить сервер в режиме восстановления и проверить сеть.

Для этого в панели VMmanager останавливаем VDS и подключаем ISO-образ sysrescueCD через меню Диски:

В VMmanager 6 ISO-образ sysrescueCD подключается в Меню сервера по кнопке Режим восстановления на главной странице панели.

После загрузки образа подключаемся по VNC и выполняем команды (в VM6 еще потребуется сначала выбрать образ восстановления в VNC)

/etc/init. d/NetworkManager stop

ifconfig eth0 IP-адрес сервера netmask 255.255.255.255
route add 10.0.0.1 eth0
route add default gw 10.0.0.1

После чего запускаем пинг до 8.8.8.8. Если он проходит, значит, с сетью на сервере всё благополучно.

Проверка на наличие сетевых потерь

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

Для диагностики подойдет утилита mtr. Она совмещает в себе трассировку и пинг, что наглядно показывает, есть ли проблемы с потерей пакетов и на каких узлах (хопах) они проявляются.

Запускаем на сервере mtr до вашего IP, с которого пробуете подключаться, и с сервера —  в обратном направлении до вашего адреса :

В верхнем окне показана трассировка с сервера до домашнего компьютера, в нижнем обратная, с ПК до сервера. Видно, что потерь нет, пакеты не теряются, пинг стабильный. Так должен выглядеть вывод mtr, если у вас все хорошо.

В случае, если на пути имеются потери, вместо 0.0% на хопах (промежуточных узлах) в столбце Loss будет указан процент потерянных пакетов от соответствующего узла. На примере ниже видно, что потери начинаются на одном из узлов и дальше сохраняются на последующих хопах:

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

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

Как создать Point-To-Point VPN с помощью WireGuard в Ubuntu 18.

04

WireGuard — это современная высокопроизводительная VPN, разработанная для простоты использования и обеспечения надежной безопасности. WireGuard фокусируется только на обеспечении безопасного соединения между сторонами через сетевой интерфейс, зашифрованный с помощью аутентификации с открытым ключом. Это означает, что, в отличие от большинства VPN, топология не применяется, поэтому различные конфигурации могут быть достигнуты путем манипулирования окружающей сетевой конфигурацией. Эта модель предлагает большую мощность и гибкость, которую можно применять в соответствии с вашими индивидуальными потребностями.
Одна из самых простых топологий, которую может использовать WireGuard, — это соединение «точка-точка». Это устанавливает безопасную связь между двумя машинами без посредничества центрального сервера. Этот тип соединения может также использоваться между более чем двумя участниками для создания топологии ячеистой VPN, где каждый отдельный сервер может напрямую общаться со своими одноранговыми узлами. Поскольку каждый хост находится в равных условиях, эти две топологии лучше всего подходят для создания безопасного обмена сообщениями между серверами, а не для использования одного сервера в качестве шлюза для маршрутизации трафика.
В этом руководстве мы продемонстрируем, как установить VPN-соединение типа «точка-точка» с WireGuard, используя два сервера Ubuntu 18.04. Мы начнем с установки программного обеспечения, а затем сгенерируем пары криптографических ключей для каждого хоста. После этого мы создадим короткий файл конфигурации, чтобы определить информацию о подключении партнера. Как только мы запустим интерфейс, мы сможем отправлять защищенные сообщения между серверами через интерфейс WireGuard.

Предпосылки

Чтобы следовать этому руководству, вам потребуется доступ к двум серверам Ubuntu 18.04. На каждом сервере вам нужно будет создать пользователя без sudoполномочий root с правами для выполнения административных действий. Вам также понадобится базовый брандмауэр, настроенный в каждой системе. Когда вы будете готовы продолжить, войдите на каждый сервер со своим sudoпользователем.

Установка программного обеспечения

Проект WireGuard предоставляет PPA современные пакеты для систем Ubuntu. Нам нужно будет установить WireGuard на оба наших сервера, прежде чем мы сможем продолжить. На каждом сервере выполните следующие действия.
Сначала добавьте в систему WireGuard PPA, чтобы настроить доступ к пакетам проекта:

sudo add-apt-repository ppa:wireguard/wireguard
Нажмите ENTER, когда будет предложено добавить новый источник пакета в вашу apt
конфигурацию. После добавления PPA обновите локальный индекс пакета, чтобы получить информацию о новых доступных пакетах, а затем установите модуль ядра WireGuard и компоненты пользовательского пространства:

sudo apt-get updatesudo apt-get install wireguard-dkms wireguard-toolsДалее мы можем начать настройку WireGuard на каждом из наших серверов.

Создание приватного ключа

Каждый участник WireGuard VPN аутентифицируется для своих партнеров, используя криптографию с открытыми ключами. Соединения между новыми партнерами могут быть установлены путем обмена открытыми ключами и выполнения минимальной конфигурации. Чтобы сгенерировать закрытый ключ и записать его непосредственно в файл конфигурации WireGuard, введите на каждом сервере следующее(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey Первая команда записывает начальное содержимое файла конфигурации в /etc/wireguard/wg0.conf . umask Значение в суб-оболочки , так что мы создаем файл с ограниченными разрешениями , не затрагивая нашу регулярную среду. Вторая команда генерирует закрытый ключ с помощью команды WireGuard wg и записывает его непосредственно в наш ограниченный файл конфигурации. Мы также передаем ключ обратно в wg pubkey команду, чтобы получить связанный открытый ключ, который мы записываем в файл, который вызывается /etc/wireguard/publickey для удобства. Нам нужно будет обменяться ключом в этом файле со вторым сервером при определении нашей конфигурации.

Создание файла начальной конфигурации

Далее мы откроем файл конфигурации в редакторе, чтобы настроить несколько других деталей: 

sudo nano /etc/wireguard/wg0.conf
Внутри вы должны увидеть ваш сгенерированный закрытый ключ, определенный в разделе с именем [Interface]
. Этот раздел содержит конфигурацию для локальной стороны соединения.

Настройка раздела интерфейса

Нам нужно определить IP-адрес VPN, который будет использовать этот узел, и порт, который он будет прослушивать для соединений от пиров. Начните с добавления ListenPort
и SaveConfig
строк, чтобы ваш файл выглядел так:
/etc/wireguard/wg0.conf
[Interface]PrivateKey = generated_private_keyListenPort = 5555SaveConfig = true
Это устанавливает порт, который прослушивает WireGuard. Это может быть любой свободный, привязываемый порт, но в этом руководстве мы настроим наш VPN на порт 5555 для обоих серверов. Установите ListenPortна каждом хосте порт, который вы выбрали:
Мы также настроены SaveConfigна true. Это скажет wg-quickслужбе автоматически сохранять свою активную конфигурацию в этот файл при завершении работы.
Примечание. Если этот параметр SaveConfigвключен, wg-quickслужба перезаписывает содержимое /etc/wireguard/wg0.confфайла при каждом завершении работы службы. Если вам нужно изменить конфигурацию WireGuard, либо отключите wg-quickслужбу перед редактированием /etc/wireguard/wg0.confфайла, либо внесите изменения в работающую службу с помощью wgкоманды (они будут сохранены в файле при завершении работы службы). Любые изменения, внесенные в файл конфигурации во время работы службы, будут перезаписаны при wg-quickсохранении активной конфигурации.

Затем добавьте уникальное Addressопределение для каждого сервера, чтобы wg-quickслужба могла задавать информацию о сети при запуске интерфейса WireGuard. Мы будем использовать подсеть 10.0.0.0/24 в качестве адресного пространства для нашего VPN. Для каждого компьютера вам нужно будет выбрать уникальный адрес в этом диапазоне (от 10.0.0.1 до 10.0.0.254) и указать адрес и подсеть, используя нотацию CIDR .
Мы дадим нашему первому серверу адрес 10.0.0.1, который обозначен как 10.0.0.1/24 в нотации CIDR:

/etc/wireguard/wg0.conf на первом сервере

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24

На нашем втором сервере мы определим адрес как 10.0.0.2, что даст нам представление CIDR 10.0.0.2/24:

/etc/wireguard/wg0.conf на втором сервере

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.2/24

Это конец [Interface]раздела.
Мы можем ввести информацию об одноранговых узлах сервера либо в файле конфигурации, либо вручную, используя wgкоманду позже. Как упомянуто выше, wg-quickслужба с SaveConfigпараметром, установленным в, trueбудет означать, что информация о партнере будет в конечном итоге записана в файл любым из методов.
Чтобы продемонстрировать оба способа определения идентификаторов пиров, мы создадим [Peer]раздел в файле конфигурации второго сервера, но не первый. Теперь вы можете сохранить и закрыть файл конфигурации для первого сервера (тот, который определяет адрес 10.0.0.1).

Определение одноранговой секции

В файле конфигурации, который все еще открыт, создайте раздел под названием [Peer]«Записи в [Interface]разделе».
Начните с установки PublicKeyзначения открытого ключа первого сервера. Вы можете найти это значение, набрав cat /etc/wireguard/publickeyна противоположном сервере. Мы также установим AllowedIPsIP-адреса, действительные внутри туннеля. Поскольку мы знаем конкретный IP-адрес, который использует первый сервер, мы можем ввести его напрямую, заканчивая /32указанием диапазона, который содержит одно значение IP:

/etc/wireguard/wg0.conf на втором сервере

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32

Наконец, мы можем установить Endpointпубличный IP-адрес первого сервера и прослушивающий порт WireGuard (в этом примере мы использовали порт 5555). WireGuard обновит это значение, если он получит законный трафик от этого однорангового узла на другой адрес, позволяя VPN адаптироваться к условиям роуминга. Мы устанавливаем начальное значение, чтобы этот сервер мог инициировать контакт:

/etc/wireguard/wg0.conf на втором сервере

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32
Endpoint = public_IP_of_first_server:5555

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

Запуск VPN и подключение к пирам

Теперь мы готовы запустить WireGuard на каждом сервере и настроить соединение между нашими партнерами.

Открытие брандмауэра и запуск VPN

Сначала откройте порт WireGuard в брандмауэре на каждом сервере:
sudo ufw allow 5555 Теперь запустите wg-quick сервис, используя wg0 файл интерфейса, который мы определили: sudo systemctl start wg-quick@wg0Это запустит wg0сетевой интерфейс на машине. Мы можем подтвердить это, набрав: ip addr show wg0 Output on first server 6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1 link/none inet 10.0.0.1/24 scope global wg0 valid_lft forever preferred_lft forever  Мы можем использовать wg инструмент для просмотра информации об активной конфигурации VPN: sudo wg На сервере без однорангового определения дисплей будет выглядеть примерно так: Output on first server interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555  На сервере с уже определенной конфигурацией однорангового узла выходные данные также будут содержать эту информацию: 

Output on second server 

interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_first_server endpoint: public_IP_of_first_server:5555 allowed ips: 10.0.0.1/32 Чтобы завершить соединение, теперь нам нужно добавить информацию об пиринге второго сервера на первый сервер с помощью wg команды. 

Добавление информации о пропавшем узле в командной строке

На первом сервере(тот, который не отображает информацию об одноранговой сети) введите информацию об одноранговой сети вручную, используя следующий формат. Открытый ключ второго сервера можно найти в выходных данных sudo wg второго сервера: 

sudo wg set wg0 peer public_key_of_second_server endpoint public_IP_of_second_server:5555 allowed-ips 10.0.0.2/32
Вы можете подтвердить, что информация теперь находится в активной конфигурации, набрав еще sudo wg
раз на первом сервере:

sudo wg Output on first server interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_second_server endpoint: public_IP_of_second_server:5555 allowed ips: 10.0.0.2/32  Наше соединение точка-точка теперь должно быть доступно. Попробуйте пропинговать VPN-адрес второго сервера с первого: ping -c 3 10.0.0.2 Output on first server PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms --- 10.0.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms  Если все работает правильно, вы можете сохранить конфигурацию на первом сервере обратно в /etc/wireguard/wg0.conf файл, перезапустив службу: sudo systemctl restart wg-quick@wg0 Если вы хотите запустить туннель при загрузке, вы можете включить службу на каждой машине, набрав: sudo systemctl enable wg-quick@wg0Теперь VPN-туннель должен автоматически запускаться при загрузке машины.

Сеть

— как проверить связь и использовать определенную сетевую карту

У меня есть 3 сетевые карты, 1 LAN (проводная), 1 беспроводная сетевая карта и 1 беспроводной USB

как мне пинговать с определенной сетевой карты?

и как использовать определенную сетевую карту для конкретного приложения

пример

  я хочу пинговать google с wlan1
  

пример для конкретного приложения

  я хочу использовать firefox или передачу от wan1
  

Лан ip 192.168.0.2> Правильная работа

pin -I wlan1 google.com

маршрут -n

  Таблица IP-маршрутизации ядра
Шлюз назначения Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
172.16.221.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan1
192.168.48.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
  

one @ onezero: ~ $ ip route

  по умолчанию через 192.168.0.1 dev eth0 proto static
169.254.0.0/16 dev eth0 область видимости ссылка метрика 1000
172.16.221.0/24 dev vmnet8 ссылка на область видимости ядра src 172.16.221.1
192.168.0.0/24 dev eth0 proto ссылка на область видимости ядра src 192.168.0.2 метрическая 1
192.168.0.0/24 dev wlan1 proto kernel scope link src 192.168.0.3 metric 2
192.168.48.0/24 dev vmnet1 ссылка на область области ядра прото src 192.168.48.1
  

@ Халед

  one @ onezero: ~ $ ping -S 192.168.0.2 hotmail.com
PING hotmail.com (65.55.72.135) 56 (84) байт данных.
64 байта от origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req = 1 ttl = 236 time = 391 мс
64 байта от origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req = 2 ttl = 236 time = 296 мс
64 байта от источника.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req = 3 ttl = 236 time = 393 мс
64 байта от origin.sn131w.snt131.mail.live.com (65.55.72.135): icmp_req = 4 ttl = 236 time = 352 мс
  

  пинг -S 192.168.0.3 hotmail.com
PING hotmail.com (65.55.72.183) 56 (84) байт данных.
64 байта от origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req = 1 ttl = 236 time = 312 мс
64 байта от origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req = 2 ttl = 236 time = 457 мс
64 байта от источника.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req = 3 ttl = 236 time = 298 мс
64 байта от origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req = 5 ttl = 236 time = 330 мс
64 байта от origin.sn134w.snt134.mail.live.com (65.55.72.183): icmp_req = 6 ttl = 236 time = 300 мс
  

Теперь напоследок выдача заявки

ubuntu — Ping не работает на вторичном интерфейсе на сервере

Я прикрепил изображение конфигурации моего сервера. Сервер
использует Ubuntu 14.04.5 LTS
На сервере A eth3 является моим основным интерфейсом со статическим IP-адресом 192.168.0.62. Я создал другой интерфейс для карты 10g и назначил IP-адрес 192.168.0.160. Эта карта 10g взаимодействует только с другой автономной картой 10g на базе FPGA, которая может обрабатывать пакеты с помощью небольшого процессора и отвечать на них.
Ниже приведен мой файл настроек / etc / network / interfaces

.

  # interface (5) файл, используемый ifup (8) и ifdown (8)
авто lo eth3
iface lo inet loopback

авто eth3
iface eth3 inet static
адрес 192.168.0.62
маска сети 255.255.255.0
шлюз 192.168.0.1
dns-search bg1test.intrbg
DNS-сервер 192.168.0.39

авто eth5
iface eth5 inet static
адрес 192.168.0.160
маска сети 255.255.255.0
сеть 192.168.0.0
  

С этой настройкой я не могу проверить связь с автономной картой 10g

  пинг -I eth5 192.168.0.166
PING 192.168.0.166 (192.168.0.166) из 192.168.0.62 eth5: 56 (84) байтов данных
  

Хотя я должен увидеть запрос и ответ ICMP в Wireshark ..
Когда я сделал route -n, я получил следующую таблицу

  $ маршрут -n
Таблица IP-маршрутизации ядра
Шлюз назначения Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth3
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth5
192.168.0.160 192.168.0.1 255.255.255.255 UGH 0 0 0 eth5
192.168.0.160 192.168.0.166 255.255.255.255 UGH 0 0 0 eth5
  

Брандмауэр для этого конкретного сервера выключен.Я проверил ответы по этой ссылке
Что мешает машине отвечать на эхо-запросы?
и это
как пинговать и использовать определенную сетевую карту Но не работает
Заранее спасибо

linux — ping -I работает только на интерфейсе со шлюзом по умолчанию?

Частичный ответ:

Для начала вам понадобится шлюз для подсети. Если вы не можете заставить DHCP работать, сделайте это сейчас вручную:

  ip route добавить 192.168.2.0/24 через 192.168.2.1 dev eth0.782
  

(Возможно, вам сначала придется удалить маршрут без шлюза; я никогда не пробовал обновить маршрут без шлюза.Используйте ip route для получения всех маршрутов, затем ip route del ... с информацией из предыдущего шага, чтобы удалить его.)

Затем проверьте с помощью ip route (или netstat -rn ), что шлюз настроен правильно.

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

Если вы планируете использовать эту настройку как способ выхода в Интернет через два разных интерфейса: Это не сработает (и это часто задаваемые вопросы, примерно каждую неделю кто-то пробует вариант этого).

Итак, если это вопрос XY, где ваш X — «Я хочу подключиться к Интернету двумя разными способами», а ваш Y — «Я хочу выполнить ping без маршрута по умолчанию», вам необходимо разработать свой X ( например, «все ли приложения, которые вы используете, смогут привязаться к определенному интерфейсу?» или «почему бы не использовать сетевые пространства имен»?)

Редактировать

Итак, если вариант использования «проверьте подключение в другой локальной сети, сделайте что-нибудь на основе результата», вероятно, самый простой способ — создать другое сетевое пространство имен , настроить его в / etc / netns / your_namespace / network / interfaces (это особенность ip netns exec , прочтите об этом), используйте inet dynamic вместо inet static , чтобы убедиться, что он получает адрес DHCP и маршрут по умолчанию, а затем запустите ping в этом пространстве имен используя ip netns exec .

У вас больше нет конфликтующих маршрутов по умолчанию, проблема решена. Вам нужно будет прочитать о сетевых пространствах имен, например, много вопросов здесь и на unix.stackexchange.

Вы также можете попытаться объединить маршрутизацию политики с привязкой ping -I , но это, вероятно, будет сложнее, особенно если вам нужна конфигурация DHCP для вашего второго интерфейса.

[решено] Linux сервер может пинговать только локальный хост

У меня старый Dell PowerEdge 2800, который я пытаюсь использовать в качестве резервного сервера.В настоящее время он работает под управлением Debian 7. Он имеет два сетевых порта (оба на материнской плате). Первый установлен на статический IP-адрес и работает нормально. Второй порт — проблема. Когда я подключаю к нему сетевой кабель (и только он), я не могу достичь ничего, кроме локального хоста. Сервер даже не может пинговать шлюз. Сервер явно получает IP-адрес, но не может общаться с внешним миром. Верно и обратное. Я не могу пинговать сервер с других компьютеров или получить к нему доступ через SSH.Интересно, что последний работал до тех пор, пока ИТ-отдел кампуса не переместил сервер в другую подсеть. Мой файл / etc / network / interfaces выглядит так:

Текст

 авто лоу
iface lo inet loopback

авто eth0
iface eth0 inet статический
     адрес <статический IP-адрес>
     netmask <маска сети>
     шлюз <шлюз по умолчанию>

Авто eth2iface eth2 inet dhcp
 

и мой resolv.conf:

Текст

 домен deltastate.edu
поиск deltastate.edu
сервер имен 
сервер имен 
 

Я не знаю, почему там две верхние строки, но они появляются каждый раз, когда я перезапускаю сеть. Nslookup возвращает «серверы не найдены». Однако ip addr show отображает сетевой адаптер как имеющий IP-адрес и работающий. У кого-нибудь есть идеи? Единственное, что я думаю — это плохой сетевой порт или неправильная конфигурация на сетевом уровне.

Отредактировано 3 апреля 2017 г. в 22:24 UTC


Datil

OP

digital0ak

Этот человек — проверенный профессионал.

подтвердите ваш аккаунт
чтобы ИТ-специалисты увидели, что вы профессионал.

4 апреля 2017 г., 13:23 UTC

Майкл Паульмено написал:

Возможно ли, чтобы один интерфейс имел статический IP-адрес, а другой использовал DHCP? На сервере работает FOG, и я хочу, чтобы eth0 был рабочим IP-адресом, а eth2 использовался для обновлений системы и т. Д. Таким образом, мы можем перейти от основного сервера к резервному, просто подключив кабель.

Подождите, вы не используете оба интерфейса одновременно?

Это ваша таблица маршрутизации на коробке.

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

В итоге я просто свернул и использовал статические настройки для каждого интерфейса. А может, я просто полностью сдался. Я забыл. На самом деле я больше не использую Debian.Я склонен придерживаться стороны Fedora / CentOS / RHEL, опять же со статическими настройками.

Я не говорю, что вы не можете этого сделать, потому что у вас может быть один статический интерфейс и один DHCP. Но пробовали ли вы подключить оба интерфейса одновременно? Попробуйте это, чтобы увидеть, есть ли у вас транспортный поток. Вы должны это сделать, но это может быть не так, как вы ожидаете.

Посмотрите таблицу маршрутизации.

Используйте команду ping с правильным аргументом, чтобы указать, какой интерфейс вы используете, чтобы проверить, можете ли вы общаться.

Узнайте, как устанавливать маршруты. Возможно даже использовать раздельное туннелирование, о котором есть много документации.

Надеюсь, это поможет

Исправить сетевое подключение к облачному серверу Linux — Урок

Если ваш Linux-сервер отключен или недоступен по другим причинам, вы всегда должны иметь возможность войти в систему с помощью веб-консоли на панели управления UpCloud или через соединение VNC. После входа в систему проверьте подключение вашего сервера к Интернету с помощью команды ping и общедоступного IP-адреса, например общедоступного DNS-сервера Google, который, скорее всего, ответит, если ваше подключение к Интернету работает.

 пинг -c 4 8.8.8.8 

Ваш вывод должен показать что-то вроде

 PING 8.8.8.8 (8.8.8.8) 56 (84) байтов данных.
64 байта из 8.8.8.8: icmp_seq = 1 ttl = 58 время = 1,68 мс
64 байта из 8.8.8.8: icmp_seq = 2 ttl = 58 время = 1,70 мс
64 байта из 8.8.8.8: icmp_seq = 3 ttl = 58 time = 1,71 мс
64 байта из 8.8.8.8: icmp_seq = 4 ttl = 58 время = 1,69 мс

--- 8.8.8.8 статистика пинга ---
4 пакета передано, 4 получено, потеря пакетов 0%, время 3005 мс
rtt min / avg / max / mdev = 1.686 / 1,699 / 1,718 / 0,051 мс
 

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

Тестовый хостинг на UpCloud!

Проверьте конфигурацию сети

Убедитесь, что сетевые интерфейсы, такие как eth0, включены. Чтобы увидеть все настроенные интерфейсы, используйте эту команду.

 IP-адрес 

Вывод команды покажет состояние каждого сетевого интерфейса на сервере с «состоянием UP» или «состоянием DOWN», например, как показано ниже.

 2: eth0:  mtu 1500 qdisc pfifo_fast состояние UP группа по умолчанию qlen 1000 

Включите все отключенные интерфейсы следующей командой.

 sudo ifup <имя интерфейса> 

Здесь имя интерфейса — одно из имен, перечисленных в выходных данных команды ip addr, например eth0, eth2 или eth3.

Когда все сетевые интерфейсы будут включены, попробуйте снова использовать команду ping. Если проблема не устраняется, убедитесь, что сетевым интерфейсам назначены IP-адреса, и они соответствуют информации в разделе «Сеть» панели управления UpCloud.

Попробуйте перезапустить любой проблемный интерфейс с помощью следующих команд.

 sudo ifdown <имя интерфейса>
sudo ifup <имя интерфейса> 

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

 sudo ifdown --force <имя интерфейса>
sudo ifup <имя интерфейса> 

Если перезапуск сетевого интерфейса устранил проблему, отлично! Если нет, продолжайте поиск и устранение неисправностей.

Проверьте файл конфигурации сети

Linux обычно хранит сетевые настройки в определенных файлах и считывает их, например, при загрузке или при использовании команды ifup. Чтобы внести изменения в конфигурацию сети, вам нужно открыть нужный файл в текстовом редакторе. В дистрибутивах на основе Debian и Ubuntu это можно сделать с помощью

 Судо нано / и т. Д. / Сети / интерфейсы 

В большинстве случаев файл интерфейсов должен содержать как минимум следующие интерфейсы.

 авто лоу
iface lo inet loopback

авто eth0
iface eth0 inet dhcp

авто eth2
iface eth2 inet dhcp 

В CentOS и других вариантах Red Hat эти конфигурации разделены на отдельные файлы для каждого сетевого интерфейса и хранятся в / etc / sysconfig / network-scripts /.Интерфейс по умолчанию для подключения к Интернету обычно называется eth0, откройте соответствующий файл конфигурации.

 Судо vi / и т. Д. / Sysconfig / сетевые сценарии / ifcfg-eth0 

Файл конфигурации для eth0 должен выглядеть следующим образом.

 УСТРОЙСТВО = eth0
BOOTPROTO = dhcp
ONBOOT = да 

Если файлы конфигурации интерфейсов не соответствуют приведенному здесь примеру, отредактируйте файл, специфичный для вашей системы, чтобы восстановить исходную функциональность. Чтобы любые изменения, внесенные в эти файлы, вступили в силу, необходимо перезапустить интерфейсы, к которым применяются изменения, как описано ранее с помощью команд ifdown и ifup.

Проверить записи DNS серверов

Если эхо-запрос с IP-адресом работает, но обычное соединение по-прежнему не работает, попробуйте вместо этого выполнить эхо-запрос доменного имени. Например, вы можете пропинговать домен UpCloud таким образом.

 пинг upcloud.com 

Если домен не отвечает, проблема, скорее всего, связана с тем, как ваш сервер преобразовывает доменные имена в IP-адреса. Проверьте записи DNS вашего сервера.

 судо кот /etc/resolv.conf 

Список должен содержать минимум 1 сервер имен.Все DNS-преобразователи по умолчанию в UpCloud имеют одинаковые IP-адреса независимо от зоны доступности. Серверы DNS предоставляются автоматически по протоколу DHCP, и в операционной системе не должно быть необходимости в ручной настройке.

IPv4-адреса DNS-резольвера UpCloud:

Если ваш сервер имеет общедоступный IPv6-адрес, вы также можете использовать IPv6 со следующими серверами:

  • 2a04: 3540: 53 :: 1
  • 2a04: 3544: 53 :: 1

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

 судо resolvconf -u 

На серверах Debian, на которых не установлен resolvconf, вы можете напрямую редактировать файл resolv.conf.

 Судо нано /etc/resolv.conf 

Добавьте в файл строки, показанные ниже, сохраните и выйдите.

 сервер имен 94.237.127.9
сервер имен 94.237.40.9 

Те, у которых установлен resolvconf, в случае, если resolv.conf все еще пуст после команды обновления, вы можете добавить серверы имен в файл интерфейсов.Откройте его для редактирования.

 Судо нано / и т. Д. / Сети / интерфейсы 

Добавьте сервер имен в конец раздела eth0.

 авто eth0
iface eth0 inet dhcp
DNS-серверы 94.237.127.9 

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

 sudo service перезапуск сети 

В CentOS и других вариантах Red Hat файл resolv.conf заполняется немного иначе, если файл пуст, вы можете добавить до двух записей DNS в файл конфигурации сети для сетевого интерфейса, отвечающего за общедоступный IP-адрес.Например, откройте ifcfg-eth0 следующей командой.

 Судо vi / и т. Д. / Sysconfig / сетевые сценарии / ifcfg-eth0 

Отредактируйте файл, чтобы он выглядел так.

 УСТРОЙСТВО = eth0
BOOTPROTO = dhcp
ONBOOT = да
DNS1 = 94.237.127.9
DNS2 = 94.237.40.9 

Выйдите из редактора и перезапустите интерфейс, файл конфигурации которого вы только что редактировали с помощью команд ifdown и ifup.

Проверить соединение в обоих направлениях

Попробуйте проверить связь с вашим сервером через Интернет.Откройте терминал или командную строку на своем компьютере и попробуйте проверить связь с общедоступным IP-адресом вашего сервера, который вы можете найти на панели управления UpCloud в разделе «Сеть».

 На вашем компьютере: ping <общедоступный IP-адрес сервера> 

Проверьте подключение к Интернету, выполнив ping, и другой сайт с вашего сервера, например, используйте следующую команду для проверки связи общедоступного DNS Google.

 пинг 8.8.8.8 

Если у вас есть второй сервер, развернутый в вашей учетной записи, и проблема связана с интерфейсом, которому назначен частный IP-адрес, попробуйте выполнить эхо-запрос с вашим другим сервером на него и с него, используя частные IP-адреса, перечисленные в панели управления UpCloud.

Если ping не получает ответа, попробуйте перезапустить все сетевые службы вашего сервера. В Debian и Ubuntu 12.04 или более ранней версии используйте команду ниже.

 sudo service перезапуск сети 

В CentOS и других системах на базе Red Hat вместо этого перезапустите сеть с помощью приведенной ниже команды.

 перезапуск сети обслуживания sudo 

В Ubuntu 14.04 и новее вам нужно будет запускать команду для каждого сетевого интерфейса отдельно, например, вы можете просто перезапустить eth0, выполнив следующие действия.

 судо ifdown eth0 && судо ifup eth0 

После перезапуска сетевых служб попробуйте снова запустить команду ping в обоих направлениях. Если ping работает в одном направлении, но не работает в другом, проверьте настройки брандмауэра.

Узнайте, где не удается установить соединение

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

На серверах

Ubuntu для этой цели есть сетевой инструмент под названием mtr, запустите его с помощью следующей команды.

 метров 8.8.8.8 

А чтобы выйти, просто нажмите q на клавиатуре.

Для этого в системах Debian, где mtr обычно не устанавливается по умолчанию, вы можете вместо этого использовать traceroute.

 traceroute -4 8.8.8.8 

На серверах CentOS используйте команду tracepath.

 трассировка 8.8.8.8 

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

 Мой traceroute [v0.85]
ubuntu.jr-ux.com (0.0.0.0) Ср 29 июл 16:03:43 2015
Клавиши: Справка Режим отображения Перезапустить статистику Порядок выхода полей
                                             Пакеты Пинги
 Host Loss% Snt Last Avg Best Wrst StDev
 1.83.136.252.2 0,0% 8 0,5 0,4 0,4 ​​0,5 0,0
 2. te0-0-1-2.rcr11.lon10.atlas.cogentco.c 0,0% 8 0,8 0,8 0,7 1,1 0,0
 3. te0-7-0-13.ccr22.lon01.atlas.cogentco. 0,0% 8 1,2 1,2 1,1 1,3 0,0
 4. 149.14.8.150 0,0% 8 1,3 2,7 1,1 13,0 4,1
 5. 216.239.47.25 0,0% 7 1,9 1,8 1,8 1,9 0,0
 6. 216.239.47.59 0,0% 7 1.8 1,9 1,8 2,0 0,0
 7. google-public-dns-a.google.com 0,0% 7 2,0 2,1 1,9 2,3 0,0
 

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

 traceroute на 8.8.8.8 (8.8.8.8), не более 30 переходов, 60 байтовых пакетов
 1 83.136.252.2 (83.136.252.2) 0,494 мс 1.010 мс 1,006 мс
 2 te0-0-1-2.rcr11.lon10.atlas.cogentco.com (149.11.22.93) 0,877 мс 1,415 мс 1,413 мс
 3 te0-7-0-13.ccr22.lon01.atlas.cogentco.com (154.54.75.65) 1,107 мс 1,643 мс 1,648 мс
 4 149.14.8.150 (149.14.8.150) 1,499 мс 1,495 мс 1,492 мс
 5 216.239.47.25 (216.239.47.25) 2.096 мс 64.233.174.213 (64.233.174.213) 2.097 мс 216.239.47.23 (216.239.47.23) 2.090 мс
 6 72.14.237.41 (72.14.237.41) 2.088 мс 216.239.47.59 (216.239.47.59) 1.717 мс 209.85.249.241 (209,85,249,241) 1,995 мс
 7 google-public-dns-a.google.com (8.8.8.8) 1,733 мс 2,250 мс 1,721 мс
 

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

 traceroute -4 <общедоступный IP-адрес сервера> 

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

Настройки брандмауэра

Убедитесь, что ваше соединение не блокируется брандмауэром. CentOS и некоторые другие дистрибутивы на основе Red Hat по умолчанию имеют строгие правила брандмауэра. Следующая команда выведет список всех правил брандмауэра на стороне сервера в вашей системе.

 судо iptables -L 

Iptables — это встроенный программный брандмауэр Linux, и приведенная выше команда выводит на экран следующее.

 Цепочка INPUT (политика ACCEPT)
target prot opt ​​источник назначения
ПРИНЯТЬ все - где угодно и где угодно СВЯЗАННЫЙ, СОЗДАННЫЙ
ПРИНЯТЬ tcp - где угодно и где угодно Брандмауэр dpt: http
ПРИНЯТЬ tcp - в любом месте tcp dpt: ssh
БРОСИТЬ все - где угодно и где угодно

Цепочка ВПЕРЕД (политика ПРИНЯТЬ)
target prot opt ​​источник назначения

Цепочка ВЫВОДА (политика ПРИНЯТЬ)
target prot opt ​​источник назначения 

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

Панель управления UpCloud также предоставляет легко настраиваемый брандмауэр в настройках вашего сервера на вкладке «Брандмауэр».

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

Информация о статусе хоста

Самую свежую информацию об инфраструктуре UpCloud можно найти на сайте status.upcloud.com, где вы также можете подписаться на обновления по электронной почте, SMS, а также через Atom или RSS.

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

ping — отправить пакеты ICMP ECHO_REQUEST на сетевые узлы

Предоставлено: inetutils-ping_1.9.2-1_amd64

 

НАИМЕНОВАНИЕ

       ping  - отправлять пакеты ICMP ECHO_REQUEST на сетевые узлы

 

ОБЗОР

       ping  [ -Rdfnqrv ] [ -c   count ] [ -i   wait ] [ -l   preload ] [ -p   pattern ] [  размер пакета ]  хост 

 

ОПИСАНИЕ

       Ping  использует обязательную дейтаграмму ECHO_REQUEST протокола ICMP для вызова ICMP
     ECHO_RESPONSE от хоста или шлюза.Дейтаграммы ECHO_REQUEST (`` пинги '') имеют IP и
     Заголовок ICMP, за которым следует «struct timeval», а затем произвольное количество «pad» байтов.
     используется для заполнения пакета. Возможны следующие варианты:

       -c   количество 
             Остановить после отправки (и получения)  подсчет  пакетов ECHO_RESPONSE.

       -d  Установить опцию SO_DEBUG для используемого сокета.

       -f  Пинг флуд. Выводит пакеты с такой же скоростью, как они возвращаются, или сто раз за
             во-вторых, в зависимости от того, что больше.Для каждого отправленного ECHO_REQUEST печатается точка ``. '',
             в то время как для каждого полученного ECHO_REPLY печатается возврат. Это обеспечивает быстрое
             отображение количества отброшенных пакетов. Только суперпользователь может использовать это
             вариант.  Этот   может   быть   очень   жесткий   на     сети   и   должен   быть   использовать   с   осторожностью.

       -i   подождите 
             Подождите  подождите  секунд  между   отправив   каждый пакет  . По умолчанию ждать одного
             секунду между каждым пакетом. Этот параметр несовместим с параметром  -f .

       -l   предварительный натяг 
             Если указана предварительная загрузка  ,  ping  отправит такое количество пакетов как можно быстрее перед
             переходя в нормальный режим поведения. -n  Только числовой вывод. Попытки поиска символьных имен хоста предприниматься не будут.
             адреса.

       -п   узор 
             Вы можете указать до 16 байтов `` заполнителя '' для заполнения отправляемого пакета. Это
             полезен для диагностики проблем, связанных с данными в сети. Например, «-p ff»
             приведет к заполнению отправленного пакета всеми единицами.

       -q  Тихий вывод. Ничего не отображается, кроме итоговых строк при запуске и
             когда закончите. -R  Запись маршрута. Включает опцию RECORD_ROUTE в пакет ECHO_REQUEST и
             отображает буфер маршрута для возвращенных пакетов. Обратите внимание, что заголовок IP только
             Достаточно большой для девяти таких маршрутов. Многие хосты игнорируют или отклоняют эту опцию.

       -r  Обойти обычные таблицы маршрутизации и отправить непосредственно на хост в присоединенной сети.
             Если хост не находится в сети с прямым подключением, возвращается ошибка. Эта
             опция может использоваться для проверки связи с локальным хостом через интерфейс, у которого нет маршрута
             через него (e.g., после того, как интерфейс был отключен Routed (8)).

       -s   размер пакета 
             Задает количество байтов данных для отправки. По умолчанию 56, что переводится как
             в 64 байта данных ICMP в сочетании с 8 байтами данных заголовка ICMP.

       -v  Подробный вывод. Перечисляются полученные ICMP-пакеты, отличные от ECHO_RESPONSE.

     При использовании  ping  для локализации сбоев его следует сначала запустить на локальном хосте, чтобы проверить
     что интерфейс локальной сети запущен и работает.Затем хосты и шлюзы дальше и
     подальше должно быть `` пинговать ''. Время приема-передачи и статистика потери пакетов
     вычислено. Если получены дублирующиеся пакеты, они не учитываются при потере пакетов.
     вычисление, хотя время приема-передачи этих пакетов используется при вычислении
     минимальное / среднее / максимальное время приема-передачи. Когда указанное количество пакетов
     было отправлено (и получено), или если программа завершается с помощью SIGINT, краткое резюме
     отображается.Эта программа предназначена для использования при тестировании, измерении и управлении сетью. Потому что
     нагрузку, которую он может наложить на сеть, неразумно использовать  ping  во время нормальной работы или
     из автоматизированных скриптов.

 

ICMP ПАКЕТ ДЕТАЛИ

     Заголовок IP без параметров составляет 20 байтов. Пакет ICMP ECHO_REQUEST содержит
     дополнительные 8 байтов заголовка ICMP, за которым следует произвольный объем данных.Когда
      Размер пакета  Дано , это указывает размер этой дополнительной части данных (по умолчанию
     56). Таким образом, объем данных, полученных внутри IP-пакета типа ICMP ECHO_REPLY, будет
     всегда быть на 8 байтов больше, чем запрошенное пространство данных (заголовок ICMP).

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

ДУБЛИКАТ И ПОВРЕЖДЕНИЕ ПАКЕТОВ

       Ping  сообщит о дублированных и поврежденных пакетах. Дублирующиеся пакеты никогда не должны появляться, и
     кажется, вызвано неправильной повторной передачей на уровне ссылок. Дубликаты могут встречаться во многих
     ситуаций и редко (если вообще когда-либо) являются хорошим признаком, хотя наличие низких уровней
     дубликаты не всегда могут вызывать тревогу.

     Поврежденные пакеты, очевидно, являются серьезной причиной для тревоги и часто указывают на неисправное оборудование.
     где-то в пути  ping  пакета (в сети или на хостах).

ИСПЫТАНИЕ РАЗНОЕ ДАННЫЕ МОДЕЛИ

     (Меж) сетевой уровень никогда не должен обрабатывать пакеты по-разному в зависимости от данных.
     содержится в части данных. К сожалению, проблемы, связанные с данными, были известны
     проникать в сети и оставаться незамеченными в течение длительного времени. Во многих случаях
     конкретный шаблон, который будет иметь проблемы, - это то, чего недостаточно
     `` переходы '', такие как все единицы или все нули, или узор прямо на краю, например
     почти все нули.Необязательно указать шаблон данных из всех нулей (для
     пример) в командной строке, потому что интересующий шаблон находится в канале данных
     уровень, и взаимосвязь между тем, что вы вводите, и тем, что передают контроллеры, может быть
     сложный.

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

 

TTL ДЕТАЛИ

     Значение TTL IP-пакета представляет максимальное количество IP-маршрутизаторов, на которое распространяется этот пакет.
     может пройти до того, как его выбросят. В текущей практике вы можете ожидать, что каждый маршрутизатор в
     Интернет, чтобы уменьшить поле TTL ровно на единицу.

     В спецификации TCP / IP указано, что поле TTL для пакетов TCP должно быть установлено на 60, но
     многие системы используют меньшие значения (4.3 BSD использует 30, 4.2 используется 15).

     Максимально возможное значение этого поля - 255, и большинство систем Unix устанавливают поле TTL равным
     ICMP ECHO_REQUEST до 255. Вот почему вы обнаружите, что можете `` пинговать '' некоторые хосты,
     но не достигните их с помощью telnet (1) или ftp (1).

     В нормальном режиме ping печатает значение ttl из полученного пакета. Когда удаленный
     система получает пакет ping, она может делать одно из трех с полем TTL в своем
     ответ:

       ·  Не менять; это то, что делали системы Berkeley Unix до версии 4.Релиз 3BSD-Tahoe.
         В этом случае значение TTL в полученном пакете будет 255 минус количество
         маршрутизаторы в пути туда и обратно.

       ·  Установите 255; это то, что делают современные системы Berkeley Unix. В этом случае TTL
         значение в полученном пакете будет 255 минус количество маршрутизаторов на пути от
         удаленная система с  по ,  ping   ing хост .

       ·  Установите другое значение. Некоторые машины используют то же значение для пакетов ICMP, что и они.
         используйте для пакетов TCP, например 30 или 60.Другие могут использовать совершенно дикие
         ценности.

 

ОШИБКИ

     Многие хосты и шлюзы игнорируют параметр RECORD_ROUTE.

     Максимальная длина IP-заголовка слишком мала для таких параметров, как RECORD_ROUTE, чтобы быть полностью
     полезно. Однако с этим мало что можно сделать.

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

 

СМОТРИ ТАКЖЕ

     netstat (1), ifconfig (8), маршрутизированный (8)

 

ИСТОРИЯ

     Команда  ping  появилась в 4.3BSD.
 

15 примеров команды Linux ping для диагностики сети

Благодаря Linux у нас есть доступ ко многим инструментам, которые упрощают сетевое администрирование и диагностику. В этом смысле команда Linux ping — один из самых полезных инструментов для системных администраторов и сетевых администраторов.

Его основная функция — определить, доступен ли один из узлов сети. Однако в этом посте мы рассмотрим другие более продвинутые возможности команды Linux Ping.

Какая польза от команды ping?

Команда ping — один из самых простых инструментов для работы с сетями. Его цель — диагностировать ошибки сетевого подключения.

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

  • Измерьте время, необходимое двум сетевым узлам для связи.
  • Мы также сможем определить IP-адрес определенного хоста.Мы можем использовать эту функцию как в Интернете, так и в частной сети.
  • Команду ping можно использовать в сценарии bash для выполнения автоматических проверок сетевых узлов.
  • Позволяет узнать, есть ли связь с конкретным оборудованием.

Как видите, это необходимая команда для администрирования сетей и серверов.

Как работает команда ping?

В Linux работу команды ping довольно просто объяснить.Команда отправляет серию небольших пакетов определенному узлу.

Вы можете протестировать этот узел, используя IP-адрес или имя хоста. Затем, после того, как вы отправите пакет, команда проверяет и измеряет время, необходимое для получения ответа от узла назначения.

Как и следовало ожидать, на время отклика могут повлиять такие условия, как географическое положение между точками подключения или любое оборудование, используемое между двумя узлами.

Например, в проводных частных сетях время выполнения команды будет лучше, чем в сети с несколькими маршрутизаторами или мостами.

Однако информация, которую будет генерировать команда, будет определять, в хорошем или плохом состоянии сеть.

Синтаксис команды следующий:

 пинг [параметры] [пункт назначения] 

Вот некоторые из наиболее полезных и используемых опций команды ping:

  • -c: с помощью этой опции вы можете указать, сколько пакетов нужно отправить.
  • -s: эта опция позволяет вам изменить размер пакетов по умолчанию.
  • -v: подробный режим.
  • -w: указывает время в секундах, в течение которого выполнение команды будет завершено. Неважно, сколько пакетов отправила или получила команда.
  • -i: с помощью этой опции вы можете указать используемый сетевой интерфейс.

Целевой узел может быть указан с помощью IP-адреса или имени хоста.

Могу ли я пинговать через прокси?

Прокси-сервер — это сервер или приложение, которое действует как посредник для соединения между двумя точками в сети.Это человек посередине делает запрос напрямую другому узлу.

Проблема в том, что для команды Ping требуется прямое сетевое соединение между узлами.

Следовательно, команда Ping обычно не может работать должным образом, если за ней стоит прокси.

Возможное решение состоит в том, что многие веб-сайты предлагают службу команд Ping. С другой стороны, для некоторых задач команды ping можно использовать команду curl. Кроме того, вы можете использовать VPN, чтобы он скрывал ваш IP.

Однако в некоторых дистрибутивах Linux эта команда не устанавливается по умолчанию. Сначала проверьте его, а затем установите, если он не установлен.

Пинг по протоколу IPv6

Обычно при использовании команды Ping мы используем IP-адреса с протоколом IPv4. Однако с появлением протокола IPv6 все чаще встречаются адреса в этом формате.

Ядро Linux поддерживает протокол IPv6, начиная с версии 2.2, поэтому в настоящее время его поддерживают все дистрибутивы Linux.

Основной синтаксис следующий:

 $ пинг -6 2001: 4860: 4860 :: 8888 

На старых версиях была команда ping6. В последних версиях Linux ping6 больше не существует, а его функции были объединены с ping, и он работает так же, как вы видели.

Основной синтаксис следующий:

 ping6 [параметры] [Назначение] 

С опцией -c мы можем указать количество пакетов для отправки, а с -i — для сетевого интерфейса, который вы будете использовать.Например:

 ping6 2001: 4860: 4860 :: 8888 

Пинг на определенный порт

Иногда нам нужно знать, активен ли конкретный порт на узле. Однако команда ping не предоставляет эту функциональность, но это можно сделать с помощью команды telnet, которая установлена ​​по умолчанию в Linux.

Для этого просто используйте следующий синтаксис:

 telnet [хост] [порт] 
 telnet google.com 80 

Таким образом можно простейшим образом выполнить эхо-запрос определенного порта сетевого узла.

Пинг со временем

Хотя команда ping отображает полезную информацию, это может быть немного проще. Однако можно немного изменить работу команды, чтобы она показывала дату отправки пакета.

Это может сделать информацию приятной для глаз и может быть полезна для скриптов и журналов.

Этого синтаксиса достаточно для этого. Однако вам необходимо установить пакет ccze.

 ping [хост] | xargs -n1 -i bash -c 'echo `date +% F \% T`" {} "' | ccze 

Как видите, он показывает время для каждого отправленного пакета.

Пинговать все хосты в данной подсети

Вы можете отправить сигнал ping на все хосты в сети или подсети. Для этого достаточно добавить параметр -b и пропинговать широковещательный IP-адрес любой сети, заканчивающейся на 255.

Например:

 пинг -b -c 4 192.168.1.255 

Итак, если пункт назначения недоступен, возможно, они блокируют пакеты ICMP, отправленные командой ping, или, возможно, есть проблема с сетью или проблема в таблице маршрутизации.

Как завершить пинг?

По умолчанию команда ping в Linux постоянно отправляет тестовые пакеты на хосты. Однако как только информация становится доступной, возникает необходимость прекратить выполнение команды ping.

Для этого просто нажмите следующие клавиши:

 CTRL + C 

Таким образом, команда сразу перестанет работать.

Окончание после определенного количества

Вы можете ограничить количество пакетов до 10 или чем-то еще.Когда он завершит отправку десяти пакетов, он остановится.

 ping -c 10 [хост] 

Где находится команда ping в Linux?

В системе, производной от Unix, такой как Linux, двоичные файлы обычно находятся по пути:

 / usr / bin / 

.

В этом каталоге вы найдете множество двоичных файлов, которые мы используем в качестве команд на терминале. В других операционных системах семейства Linux также возможно разместить его в

 / usr / sbin / 

Справочник

.

Итак, мы можем проверить это с помощью команды ls:

 $ ls / usr / bin | grep ping 

На этом изображении вы можете видеть, что команды ping расположены в

 / usr / bin / 

.

Другой способ, вы можете использовать команду which для поиска любой команды в Linux:

 $ который пинг 

Будет показано следующее:

 / usr / bin / ping 

Проверьте задержку с помощью команды ping

Одна из возможностей, предлагаемых командой ping, заключается в том, что вы можете измерить время отклика соединения .Это задержка.

Чтобы измерить задержку с помощью команды ping, просто используйте ее и обратите внимание на вывод экрана:

 ping -c 4 [хост]

пинг -c 4 192.168.1.1 

Как видите, четыре пакета были отправлены в пункт назначения с определенным временем ответа.

Внизу есть строка, которая начинается следующим образом:

 rtt мин. / Сред. / Макс. / Mdev 

Второе значение после знака равенства — это значение задержки. В данном случае значение равно 6.798.

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

Найдите идеальный MTU

MTU (максимальная единица передачи) — это значение, которое статически выражает размер в байтах самого большого блока данных, который может быть отправлен по сети.

В настоящее время из-за мер безопасности все больше и больше сетей препятствуют работе MTU.Однако в большинстве локальных сетей Ethernet используется MTU в 1500 байт.

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

 ping: локальная ошибка: слишком длинное сообщение 

Для этого используйте следующий синтаксис:

 ping -M do -s [начальное_значение] [хост] 

Например:

 пинг -M do -s 1473 192.168.1.1 

В данном случае значение размера пакета очень велико.Так что уменьшу. В данном случае оптимальное значение — 1472.

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

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

Пинг на уровне 2 (с использованием арпинга)

С помощью команды ping мы сможем выполнять тесты, зная IP-адрес определенного узла в сети.Это связано с тем, что команда ping работает на уровне 3 модели OSI (сети).

С другой стороны, можно использовать другую команду, встроенную в Linux, как arping. Эта команда работает очень похоже на ping, но работает на уровне 2 модели OSI.

Синтаксис команды следующий:

 $ sudo arping [IP_address] 
 $ судо арпинг 192.168.1.1 

Вы получите такой результат:

На экране вывода команды сначала отображается размер отправленного пакета, а затем MAC-адрес узла и время ответа.

Обратите внимание, что эта команда не устанавливается по умолчанию в Debian Linux и производных. Итак, вам нужно установить его, затем вы можете запустить его с правами root.

Ping имя хоста

По умолчанию команда ping отправляет тестовые пакеты в пункт назначения, используя IP-адрес или имя хоста пункта назначения. Также следует отметить, что большинство реализаций ping в Linux не разрешают DNS в обратном порядке.

Например, если вы используете команду Ping, добавив IP-адрес, на выходе она вернет только IP-адрес хоста.И наоборот, если мы указали имя хоста, он разрешит его и покажет IP на выходе.

Проверьте вывод следующей команды:

 $ пинг google.com 

Ping route (с использованием traceroute)

Команда ping не показывает маршрут от источника до пункта назначения.

И это может быть очень полезно в случае, если соединение с хостом было потеряно, потому что мы можем понять, в какой момент соединение было потеряно.

Команда tracert или traceroute работает аналогично команде ping. Преимущество этого метода в том, что он показывает путь, по которому идет пакет, тем самым показывая его маршрут.

Как и команда ping, установленная в большинстве дистрибутивов Linux. Базовый синтаксис следующий:

 traceroute [имя хоста / IP-адреса] 

Таким образом, мы можем увидеть маршрут, по которому идут пакеты.

Выполнить команду при сбое ping

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

Например, этот сценарий оболочки позволяет проверить, не завершилась ли команда ping:

 #! / bin / bash

ping -c 1 [хост]

Если [$? -экв 0]; тогда

    #Your_command_here

Fi 

Установите размер пакета ping

По умолчанию размер пакетов, отправляемых командой ping хостам, составляет 56 байт. Это достаточно низкое значение, чтобы не влиять на работу сети.

Однако можно изменить его на другое значение. Для этого просто добавьте параметр -s с желаемым размером пакета.

Например:

 ping -s [размер_пакета] имя хоста / IP 

Если вы хотите, чтобы размер пакета составлял 100 байт, просто используйте следующую команду:

 пинг -с 100 192.168.1.1 

Помните, что он может незначительно отличаться в зависимости от MTU.

Отключить команду ping

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

Если мы хотим временно отключить его, достаточно использовать эту команду от имени пользователя root:

 $ su

$ echo "1"> / proc / sys / net / ipv4 / icmp_echo_ignore_all 

Это отключит ответ на команду ping, но только до перезагрузки системы.

Если вы хотите сделать это постоянно, вам необходимо отредактировать следующий файл

 /etc/sysctl.conf 

и добавьте следующую строку:

 $ нано / etc / sysctl.conf 
 net.ipv4.icmp_echo_ignore_all = 1 

Затем сохраните файл и выйдите. Чтобы применить изменения, используйте эту команду:

 $ sysctl -p 

Это отключит команду ping или ответ пакетов ICMP.

Заключение

В этом посте мы подробно объяснили, как работает команда ping в Linux. От его утилиты до ее отключения. Ping — одна из самых простых в использовании команд.

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

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