Описание:
Моя команда и я работаем с парой Raspberry Pi 3 и IP-стеком под названием PicoTCP. PicoTCP использует интерфейс TAP, наш называется tap0
. Интерфейс tap0
должен иметь свой собственный IP при использовании с PicoTCP. К сожалению, поскольку интерфейс tap0
виртуализирован, он не знает о других малиновых пи в той же локальной сети. Кажется очевидным, что для решения этой проблемы нам нужно соединить интерфейс tap0
с нашим интерфейсом ethernet eth0
(поправьте меня, если я ошибаюсь). Мы перепробовали много решений безрезультатно!
Техническая информация:
- Все Pi подключены через Ethernet к одному маршрутизатору.
- Все Пи работают под управлением последней версии ОС Raspbian
Мы попробовали пару решений: https://help.ubuntu.com/community/Network%20Bridge%20w%%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-адресом и маской сети.
В частности:
Ни одно из этих решений не помогло нам.