[ПЕРЕНЕСЕНО] Проблема создания network bridge

Доброго дня!

Третий день изучаю документацию: Network bridge - ArchWiki, http://xgu.ru/wiki/Linux_Bridge, http://www.tldp.org/HOWTO/Ethernet-Bridge-netfilter-HOWTO-3.html

Помогите пож-ста поднять софтовый бридж. Уже все варианты перепробовал: netctl, iproute2, brctl. Везде результат одинаковый - как только подключаю сетевой интерфейс к мосту - связь с локальной сетью рвется - не вижу даже своего шлюза. Вот начальная конфигурация интерфейса

# ip l
1: lo:...
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT mode DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
# ip a
1: lo:...
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
    inet 172.27.102.90/24 brd 172.27.102.255 scope global enp3s0
       valid_lft forever preferred_lft forever
    inet6 fe80::beee:7bff:fe98:987f/64 scope link
       valid_lft forever preferred_lft forever

Пробовал вариант с brctl:

# sysctl net.ipv4.ip_forward=1
# ip link set enp3s0 up promisc on
# brctl addbr br0
# brctl stp br0 off
# brctl addif br0 enp3s0
# ip link set dev enp3s0 down
# ip addr add 0.0.0.0 dev enp3s0
# ip link set dev enp3s0 up
# ip addr add 172.27.102.90/24 dev br0
# ip link set dev br0 up
# ip r
172.27.102.0/24 dev enp3s0  proto kernel  scope link  src 172.27.102.90
172.27.102.0/24 dev br0  proto kernel  scope link  src 172.27.102.90

Другой вариант:

# ip addr del 172.27.102.90/24 dev enp3s0
# ip link set dev enp3s0 down
# ip link add name br0 type bridge
# ip link set dev br0 up
# ip addr add 0.0.0.0 dev enp3s0
# ip link set dev enp3s0 promisc on
# ip link set dev enp3s0 up
# ip link set dev enp3s0 master br0
# ip addr add 172.27.102.90/24 dev br0

Все команды при построении брижда проходят без ошибок, но как после подключения сетевого интерфейса к брижду подключиться к локальной сети?
Покажите же и результирующую конфигурацию интерфейсов после поднятия бриджа
ip a
ip r
А пока могу только сделать предположение, что команда
ip addr add 0.0.0.0 dev enp3s0
в вашем случае не удаляет адрес с интерфейса, а добавляет к уже существующему еще и 0.0.0.0 (смотрите вывод "ip r" приведенной вами к первому варианту настройки). Попробуйте либо "ip add del...", либо "ip addr flush dev enp3s0".
Нет. Не помогает. Может адрес надо не на брижд прибивать, но я уже по разному пробовал. Результат одинаков. Причем, если создать интерфейс TUN0, то они друг-друга видят, а наружу нет. В листинге написано "NO-CARRIER" - это "кабель не подключен"? А как же его подключить?

# cat /etc/netctl/ethernet-static
Description='A basic static ethernet connection'
Interface=enp3s0
Connection=ethernet
IP=static
Address=('172.27.102.90/24')
Gateway='172.27.102.249'

# netctl stop ethernet-static
# ip addr flush dev enp3s0
[[email protected] ib]# ip a
1: lo: ...
2: enp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
# ip link set dev enp3s0 down
# ip link add name br0 type bridge
# ip link set dev br0 up
# ip addr add 0.0.0.0 dev enp3s0
# ip link set dev enp3s0 up
# ip link set dev enp3s0 promisc on
# ip link set dev enp3s0 master br0
# ip addr add 172.27.102.90/24 dev br0
# ip l
1: lo:...
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state DORMANT mode DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
8: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
# ip a
1: lo: ...
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
    inet6 fe80::beee:7bff:fe98:987f/64 scope link
       valid_lft forever preferred_lft forever
8: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
    inet 172.27.102.90/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::f8cf:e1ff:fe16:a009/64 scope link
       valid_lft forever preferred_lft forever
# ip r
172.27.102.0/24 dev br0  proto kernel  scope link  src 172.27.102.90
# ping 172.27.102.249
PING 172.27.102.249 (172.27.102.249) 56(84) bytes of data.
From 172.27.102.90 icmp_seq=1 Destination Host Unreachable
From 172.27.102.90 icmp_seq=2 Destination Host Unreachable
From 172.27.102.90 icmp_seq=3 Destination Host Unreachable
^C
--- 172.27.102.249 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4007ms
pipe 3
# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.27.102.249                   (incomplete)                              br0
еще раз перепроверил свой последний листинг - обратил внимание, что у br0 отображается "state DOWN". Странно, ведь я давал команду "ip link set dev br0 up". Разве этого мало?
bigov
...если создать интерфейс TUN0, то они друг-друга видят, а наружу нет.
Потому что tun0 - виртуальный интерфейс и ему не надо физического подключения.
bigov
В листинге написано "NO-CARRIER" - это "кабель не подключен"? А как же его подключить?
Дак чего же вы хотите, если у вас все интерфейсы в дауне? И вопрос: "А как же его подключить?", - выглядит более чем странно. Для каких целей вы создаете бридж, имея всего один интерфейс, да и тот никуда не подключенный?
Спасибо за ответ. Вот пример последнего набора команд (работаю удаленно из дома):


#!/bin/sh

iface="enp3s0"
log="/tmp/bridge.log"

/usr/bin/netctl stop ethernet-static
/usr/bin/ip link set dev ${iface} down
/usr/bin/ip addr flush dev ${iface}
/usr/bin/ip link add name br0 type bridge
/usr/bin/ip addr add 0.0.0.0 dev ${iface}
/usr/bin/ip link set dev ${iface} promisc on
/usr/bin/ip link set dev ${iface} master br0
/usr/bin/ip addr add 172.27.102.90/24 dev br0
/usr/bin/sysctl net.ipv4.ip_forward=1
/usr/bin/ip link set dev br0 up
/usr/bin/ip link set dev ${iface} up

/usr/bin/ip r >${log}
/usr/bin/ip l >>${log}
/usr/bin/ip a >>${log}
 /usr/bin/ping -c 4 172.27.102.249 >>${log}

Потом делаю восстановление в исходное состояние и (на всякий случай ребут по таймеру)

kurych
Дак чего же вы хотите, если у вас все интерфейсы в дауне? И вопрос: "А как же его подключить?", - выглядит более чем странно.
Для меня это действительно неясно - в конце скрипта я говорю обоим интерфейсам "UP". Тем не менее - вот вывод лога


# cat /tmp/bridge.log
172.27.102.0/24 dev br0  proto kernel  scope link  src 172.27.102.90
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast master br0 state DORMANT mode DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
3: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    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: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast master br0 state DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
3: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
    inet 172.27.102.90/24 scope global br0
       valid_lft forever preferred_lft forever
PING 172.27.102.249 (172.27.102.249) 56(84) bytes of data.
From 172.27.102.90 icmp_seq=1 Destination Host Unreachable
From 172.27.102.90 icmp_seq=2 Destination Host Unreachable
From 172.27.102.90 icmp_seq=3 Destination Host Unreachable
From 172.27.102.90 icmp_seq=4 Destination Host Unreachable

--- 172.27.102.249 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms
pipe 4

kurych
Для каких целей вы создаете бридж, имея всего один интерфейс, да и тот никуда не подключенный?


Это моя рабочая машина, сетевой интерфейс в ней подключен к локалке с адресом "172.27.102.90/24". Пытаюсь подключить на ней виртуальную машину к локальной сети. Для нее создается tun0 в этом-же брижде. Я читал при виртуальный свич, но по тексту понял, что его использовать не обязательно. Вот и мучаюсь. На сервере FreeBSD у меня все получается, а вот с iproute2 пока "затык". Может я где-то не все понял?
Я так пока и не понял, почему при подключенном, по вашим словам, к локальной сети компьютере интерфейс показывает "NO-CARRIER". Пингуются ли адреса из локальной сетки при обычных настройках? То есть, покажите, что еще до поднятия конфигурации с бриджем у вас работает сетевое подключение.
В любом случае, правильной работе конфигурации с бриджем могут мешать дефолтные настройки сетевого стека в archlinux-овом ядре. Почитайте про параметр "rp_filter"
sysctl --all | grep \\.rp_filter
например здесь кое что есть.
kurych
Я так пока и не понял, почему при подключенном ... к локальной сети компьютере интерфейс показывает "NO-CARRIER"

Вы уловили суть проблемы. Именно это я сам не понимаю. Машина подключена к локалке, это мое рабочее место - с него я управляю смешанной (Win/Unix) сеткой в большой конторе, пишу скрипты для серверов. Иногда появляется необходимость отлаживать работу доменных политик на клиентах Win-XP-7-8.

Арчем я уже второй год пользуюсь. До этого целенаправленно перебрал все популярные дистирибутивы, но остался на Archlinux. Два месяца назад выдали новую "тачку" с "Win-8.1 pro" - так я на ней всего месяц "продержался" ;-). Тем не менее работу делать надо - идеальное решение было-бы иметь несколько виртуалок под рукой - характеристики компьютера позволяют.

Сеть на ней прекрасно работает до команды
ip link set dev ${iface} master br0
С этого момента начинается засада.

На рабочей машине сеть работает, хотя статус:

# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT mode DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
#
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    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: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT group default qlen 1000
    link/ether bc:ee:7b:98:98:7f brd ff:ff:ff:ff:ff:ff
    inet 172.27.102.90/24 brd 172.27.102.255 scope global enp3s0
       valid_lft forever preferred_lft forever
    inet6 fe80::beee:7bff:fe98:987f/64 scope link
       valid_lft forever preferred_lft forever
# ping 172.27.102.2
PING 172.27.102.2 (172.27.102.2) 56(84) bytes of data.
64 bytes from 172.27.102.2: icmp_seq=1 ttl=128 time=0.504 ms
64 bytes from 172.27.102.2: icmp_seq=2 ttl=128 time=0.110 ms
^C
--- 172.27.102.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.110/0.307/0.504/0.197 ms
# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.27.102.18            ether   00:13:20:e1:41:29   C                     enp3s0
172.27.102.2             ether   00:04:23:c1:84:f6   C                     enp3s0
172.27.102.249           ether   00:00:cd:34:66:9f   C                     enp3s0

Попробовал добавить настройку:

cat /etc/sysctl.d/90-firewall.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.enp3s0.rp_filter=0
Ребутнул тачку, но статус "NO-CARRIER" и проблема брижджа остались остался. Хотя теперь все фильтры отключены:
# sysctl --all | grep \\.rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.enp3s0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0

Есть еще идеи?
Попалась заметка про аналогичную проблему, правда на другой аппаратной платформе -
https://bbs.archlinux.org/viewtopic.php?id=172973. Так-же сеть работает, как и у меня, но статус интерфейса некорректный. Грустно, пока не вижу выхода.
На самом деле бридж утилитой netctl в Archlinux создается легко и просто. При условии корректно работающего интерфейса. Специально проверил на практике. В качестве подопытного использовал домашний нетбук EEEPC с ArchBang/openbox/xfce4.

1. Отключаем WiFi (Для чистоты эксперимента), отключаем сетевой апплет рабочего стола.
2. Проверяем (ip link), что сетевые интерфейсы в положении DOWN.
3. Пишем короткий конфиг для тестового бриджа:
#cat /etc/netctl/bridge
Description="My bridge"
Interface=br0
Connection=bridge
# cюда потом добавляем создаваемые виртуальные интерфейсы),
# а для проверки пока достаточно одного
BindsToInterfaces=(enp1s0)
IP=dhcp

Все. Осталось сказать бриджу "старт":

#netctl start bridge

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