Интерфейс Bridge TAP для ETH на Raspberry Pi 3?

описание:

моя команда и я работаем с парой raspberry pi 3 и IP-стеком под названием PicoTCP. PicoTCP использует интерфейс TAP, наш называется tap0. The tap0 интерфейс должен иметь свой собственный IP при использовании с PicoTCP. К сожалению, потому что tap0 интерфейс виртуализирован он не имеет никакой осведомленности о другой малины Пи в той же локальной сети. Кажется очевидным, что нам нужно преодолеть tap0 интерфейс с интерфейс Ethernet eth0 чтобы решить эту проблему (поправьте меня, если я ошибаюсь). Мы пробовали много решений безрезультатно!

Техническая Информация:

  • все Pi подключены через ethernet к одному маршрутизатору
  • все Pi работают под управлением последней версии Raspbian OS

несколько решений, которые мы пробовали:
https://help.ubuntu.com/community/Network%20Bridge%20with%20a%20Tap!

auto br0
iface br0 inet dhcp
pre-up tunctl -t (tap device ""ex:tap0"") -u (tap owner) -g (owner group name)
pre-up ip link set dev eth0 down   ('''Brings down ethernet''')
pre-up brctl addbr br0   ('''Adds bridge''')
pre-up brctl addif br0 eth0   ('''Adds eth0 to bridge''')
pre-up brctl addif br0 tap0   ('''Adds tap0 to bridge''')
pre-up ip link set dev tap0 up   ('''Bring tap0 up''')
up chmod 0666 /dev/net/tun   ('''Changes permissions on tap device to user/ owner''')
post-down ip link set dev eth0 down   ('''Brings down eth0''' )
post-down ip link set dev tap0 dpwn   ('''Brings down tap0''')
post-down ip link set dev br0 down   ('''Brings down br0''')
post-down brctl delif br0 eth0   ('''Removes bridge between br0 & eth0''')
post-down brctl delif br0 tap0   ('''Removes bridge between br0 & tap0''')
post-down brctl delbr br0  ('''Removes bridge''')

как мост нажмите на eth0 на raspberry pi?

ip tuntap add tap0 mode tap user root
ip link set tap0 up
ip link add br0 type bridge
ip link set tap0 master br0
ip link set dev eth0 down
ip addr flush dev eth0 
ip link set dev eth0 up
ip link set eth0 master br0
ip link set dev br0 up

http://prssrp.blogspot.com/2014/02/raspberry-pi-openvpn-server-bridge-mode.html

#!/bin/bash

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0"
eth_ip="192.168.10.253"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.10.255"

for t in $tap; do
    openvpn --mktun --dev $t
done

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
    brctl addif $br $t
done

for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
done

ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

PicoTCP С Использованием tap0 интерфейс:

struct pico_device* init_picotcp(void) {
    struct pico_device *dev;
    struct pico_ip4 ipaddr, netmask, local;

    pico_string_to_ipv4("tap0", &local.addr);

    dev = pico_ipv4_link_find(&local);

    if(!dev) {
        printf("FAIL!n");
        return NULL;
    }

    pico_string_to_ipv4(serv.ipv4_addr.c_str(), &ipaddr.addr);
    pico_string_to_ipv4(serv.netmask.c_str(), &netmask.addr);
    pico_ipv4_link_add(dev, ipaddr, netmask);

    return dev;
} 

эта строка:
pico_ipv4_link_add(dev, ipaddr, netmask);

открывает созданные tap0 устройство с определенным IP и маску.

в частности:

ни одно из этих решений работал для США.

1
задан Community
09.05.2023 14:13 Количество просмотров материала 3061
Распечатать страницу

1 ответ

(разработчик picoTCP здесь)

первая (очень грубая) первая догадка: вы, вероятно, настраиваете устройство TAP с правами root. Вы также используете picoTCP как root? Если вы не, он, вероятно, не может открыть кран из-за разрешений. Сначала попробуйте запустить приложение picoTCP под sudo.

если вы не хотите запускать приложение от имени root, вы можете использовать sudo tunctl -u <username>, чтобы настроить устройство крана, который доступен <username>.

если это не было причина, может потребоваться дополнительная информация: какие-либо инструменты печатают некоторые ошибки или предупреждения? Что именно Вы имеете в виду "ни одно из этих решений не работало для нас" - одна из команд (или приложение picoTCP) сообщает об ошибке, остановке или сбое, или все работает, но вы просто не можете пропинговать устройствами? Вы можете взять дамп wireshark на устройстве tap, чтобы мы могли видеть, что происходит и происходит? Можете ли вы показать нам выход ifconfig -a когда у вас все готово? И, возможно, выход brctl show как хорошо. (извините, за такой длинный список вопросов, просто есть много мелочей, которые могут пойти не так.)

кроме того, у нас есть новый пример кода в нашей ветке разработки на README.md (https://github.com/tass-belgium/picotcp/blob/development/README.md), на который вы можете взглянуть. Он также работает с устройствами tap (хотя и не с мостовым соединением). Предполагается, что он будет подталкиваться к мастеру в нашем следующем выпуске, который длится вечно. Если этот пример работает (без моста), может быть, вы можете попробовать изменить IP-адрес в примере кода, чтобы соответствовать вашей локальной сети, а затем снова мост, и вы должны быть в состоянии пинговать его.

1
отвечен frederikvs 2023-05-10 22:01

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх