3

Я хотел бы создать локальную сеть на Linux, чтобы провести несколько экспериментов. Это в первую очередь учебное упражнение, поэтому я не хочу использовать реальные интерфейсы Ethernet или тому подобное. Похоже, я могу создать фиктивные интерфейсы и подключить их к интерфейсу моста, чтобы сделать это. Каждый фиктивный интерфейс будет конечной точкой в локальной сети, а мост будет действовать как коммутатор Ethernet. Вот как я создаю ЛВС:

ip link add dummy1 type dummy
ip link add dummy2 type dummy
ip link add br0 type bridge
ip link set dummy1 arp on
ip link set dummy2 arp on
ip link set dev dummy1 master br0
ip link set dev dummy2 master br0
ip address add 10.0.2.1/24 broadcast + dev br0
ip address add 10.0.2.2/24 broadcast + dev dummy1
ip address add 10.0.2.3/24 broadcast + dev dummy2
ip link set dummy1 up
ip link set dummy2 up
ip link set br0 up

Я вижу, что ссылки работают (поиск в Google говорит, что ожидается состояние "НЕИЗВЕСТНО"):

$ ip link
...
6: dummy1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether fa:b9:0e:8e:a7:1f brd ff:ff:ff:ff:ff:ff
7: dummy2: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 7a:5d:8e:2b:76:d6 brd ff:ff:ff:ff:ff:ff
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 7a:5d:8e:2b:76:d6 brd ff:ff:ff:ff:ff:ff

И что адреса ожидаются. Однако ping и arping не работают. Другими словами, ни одно из следующего не сообщает об ответе:

ping -I dummy1 10.0.2.3
arping -I dummy1 10.0.2.3

ping -I dummy2 10.0.2.2
arping -I dummy2 10.0.2.2

Запуск wireshark на фиктивных интерфейсах показывает генерирование пакетов ping и arping , но это все.

Похоже, мост знает MAC-адреса:

$ brctl showmacs br0
port no mac addr        is local?   ageing timer
  2 7a:5d:8e:2b:76:d6   yes        0.00
  2 7a:5d:8e:2b:76:d6   yes        0.00
  1 fa:b9:0e:8e:a7:1f   yes        0.00
  1 fa:b9:0e:8e:a7:1f   yes        0.00

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

Что я должен сделать, чтобы сделать мост передними фреймами или есть другой способ построения этой ЛВС фактически кроме использования фиктивных интерфейсов?

1 ответ1

4

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

Вы не сможете построить виртуальную локальную сеть с фиктивными интерфейсами.

Вместо этого используйте сетевые пространства имен в качестве замены для разных компьютеров ("хостов") и соединяйте их с помощью виртуальных локальных сетей (пары veth).

Таким образом, вы можете построить ЛВС настолько сложной, насколько захотите. Соединяйте их по своему усмотрению, выполняйте пересылку и NAT, настраивайте сложную маршрутизацию и т.д.

В качестве отправной точки, вот сценарий, который я использую для создания сетевого пространства имен с соединением veth-pair в основном пространстве имен и xterm в этом пространстве имен. Запустите от имени пользователя root и замените USERNAME своим именем пользователя:

#!/bin/bash

# Setup network namespace with veth pair, start xterm in it

# nsterm ns0 veth0 10.0.0 yellow 24

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

NS=${1:-ns0}
DEV=${2:-veth0}
DEV_A=${DEV}a
DEV_B=${DEV}b
ADDR=${3-:10.0.0}
ADDR_A=${ADDR}.254
ADDR_B=${ADDR}.1
MASK=${5:-24}
COL=${4:-yellow}

# echo ns=$NS dev=$DEV col=$COL mask=$MASK

ip netns add $NS
ip link add $DEV_A type veth peer name $DEV_B netns $NS
ip addr add $ADDR_A/$MASK dev $DEV_A
ip link set ${DEV}a up
ip netns exec $NS ip addr add $ADDR_B/$MASK dev $DEV_B
ip netns exec $NS ip link set ${DEV}b up
ip netns exec $NS ip route add default via $ADDR_A dev $DEV_B
ip netns exec $NS su -c "xterm -bg $COL &" USERNAME

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .