Как создать сетевой мост?

Говоря простым языком – мост – соединение нескольких сетевых интерфейсов в один. Заодно привожу скриптик набросанный на скорую руку.

Так, например, у вас есть 2 сетевые карты. Пусть(как в моём примере) одна из них физическая(локальная сеть), вторая – виртуальная(это не так важно), которая представляет собой сетевую карточку виртуальной машины. Так вот мост позволяет вам через физический интерфейс внести виртуальные в вашу локальную сеть.
Суть в том, что интерфейс, который будет объединять в сеть остальные, должен быть в режиме прослушивания(promisc). Это означает что он будет захватывать все пакеты, не только для своего мак-адреса.

Предлагаю скриптик, который можно использовать самостоятельно, изменив настройки в начале файла:
[cc lang=”bash” line_numbers=”false”]
#!/bin/bash

# интерфейс к которому нужно привязать другие
dev=”eth0″
# имя моста
br=”br0″
# ip для моста
br_ip=”192.168.9.20″
# маска сети для моста
br_mask=”255.255.128.0″
# интерфейсы которые нужно добавить
toadd=”vbox0 tun0″
# шлюз системы, если пусто – не ставить маршрут
gw=”192.168.9.21″

# пути к программам(по умолчанию)
ifconfig=/sbin/ifconfig
brctl=/sbin/brctl
route=/sbin/route

echo “Setup bridge”

echo ” * Set ${dev} to ‘promisc’ mode”
${ifconfig} ${dev} up 0.0.0.0 promisc
echo ” * Adding new bridge ${br}”
${brctl} addbr ${br}
echo ” * Adding interface ${dev}”
${brctl} addif ${br} ${dev}
for i in ${toadd}
do
echo ” * Adding interface ${i}”
${brctl} addif ${br} ${i}
done
echo ” * Setting ${br}: ${br_ip}/${br_mask}”
${ifconfig} ${br} up ${br_ip} netmask ${br_mask}
if [ ! -z “${gw}” ]
then
echo ” * Setting default gateway via ${gw}”
${route} add default gw ${gw}
fi
echo “Setup bridge finished”
[/cc]
Сохраняем его как-нибудь, не забывая поставить права на выполнение(chmod +x script)

Да, нужно добавить что скрипт будет работать только для ethernet-устройств. Для wifi и более редких типов надо искать соответствующую утилиту, которая позволяет захватывать пакеты.