Автор |
Сообщение |
ProFfeSsoRr Гуру |
|
Надо для виртуальной ХР, висящей на хост-машине с Ubuntu, выйти в локалку (eth1). Нашел мануал: http://samiux.wordpress.com/2007/07/11/bridge-network-interface-on-virtualbox/ попробовал по нему, вроде заработало. А о том, что после перезагрузки настройки слетят я забыл. И вчера линукс перегрузил. И теперь вот незадачка: не могу вспомнить что я сделал помимо инструкции, чтобы локалка заработала! Делаю такие команды (разумеется от рута):
1) tunctl -t tap1 -u evv
2) brctl addbr br0
3) ifconfig eth1 0.0.0.0 promisc
4) brctl addif br0 eth1
5) ifconfig br0 192.168.0.9
6) brctl addif br0 tap1
7) ifconfig tap1 up
8) chmod 0666 /dev/net/tun
Но когда делаю команду №4 локальные компьютеры с сервером перестают видеть друг друга. Где собака зарыта?
P.S. И подскажите пожалуйста, как сделать, чтобы все эти действия при старте системы выполнялись? |
|
|
|
|
zir Форумчанин |
|
Цитата: |
Но когда делаю команду №4 локальные компьютеры с сервером перестают видеть друг друга. Где собака зарыта? |
Странно, что не после команды №3 (ведь локалка общается с сервером, используя его адрес 192.168.0.9?)
А после команды №5 локалка и сервер друг друга видят? |
|
|
|
|
ProFfeSsoRr Гуру |
|
Цитата: |
ведь локалка общается с сервером, используя его адрес 192.168.0.9? |
вообще-то .0.9 адрес br0 соединения. У сервера .0.1 А что после команды 3? Она ничего страшного не делает, просто включает promisc. После команды №4 и до перезагрузки машины либо удаления интерфейсов сервер из локалки выпадает. |
|
|
|
|
zir Форумчанин |
|
Команда 3 не только включает promisc, но и удаляет IP-адрес с интерфейса.
Что-то я не понял, исходная схема какая?
На eth1 адрес .0.1, и он смотрит в локалку (воткнут в свич/хаб)?
Если так, то, по идее, надо присвоить интерфейсу br0 адрес .0.1.
Код: |
br0 (192.168.0.1)
|
|__eth1 (no IP)
|__tap1 (no IP)
|
Кстати, promisc включать не обязательно (само включится, когда в мост добавишь), можно оставить "ifconfig eth1 0.0.0.0".
На тему мостов в Линухе: http://www.linuxfoundation.org/en/Net:Bridge |
|
|
|
|
ProFfeSsoRr Гуру |
|
Цитата: |
На eth1 адрес .0.1, и он смотрит в локалку (воткнут в свич/хаб)? |
именно так. Попробовал присвоить бриджу адрес .0.1 - все равно локалка отваливается. Вообще, непонятно немножко с этими адресами - зачем где-то сбрасывать, где-то ставить... Точнее - где именно нужно (и зачем?) убирать адрес, а где обязательно адрес нужно добавить? |
|
|
|
|
zir Форумчанин |
|
Цитата: |
Попробовал присвоить бриджу адрес .0.1 - все равно локалка отваливается. |
Вроде не должна отваливаться. А фильтрации в iptables по интерфейсу (-i, -o) или по MAC-адресу случайно нет?
Цитата: |
Вообще, непонятно немножко с этими адресами - зачем где-то сбрасывать, где-то ставить... Точнее - где именно нужно (и зачем?) убирать адрес, а где обязательно адрес нужно добавить? |
Вопрос сначала показался несложным, но обнаружилось, что я на самом деле не знаю, почему мост обычно настраивают так, как я описал в предыдущем посте...
Попробовал разобраться, и вот что получилось.
Допустим, все адреса принадлежат одной подсети (192.168.0.0), и адреса сервера, и адрес виртуального хоста, и локалка. Если это не так, то сервер является маршрутизатором, и тогда зачем нам вообще мост?
1. Если достаточно обеспечить связь между локалкой и виртуальным хостом, то IP-адреса вообще не нужны, ни на br0, ни на eth1, ни на tap1.
2. Все проблемы решает единственный адрес на br0 (все видят всех).
3. Перейдём к извращениям. Пусть схема такая.
Код: |
br0 (no IP)
|
|__eth1 (192.168.0.1)
|__tap1 (no IP)
|
Например, сервер хочет пропинговать виртуальную XP. Он посмотрит в таблицу маршрутизации — ага, надо отправлять через eth1, — и отправит ICMP Echo (ну, сначала ARP-запрос) через eth1, минуя br0. Естественно, до XP этот пакет не дойдёт.
Следует вывод, что IP-адреса только на одном из "субинтерфейсов" бриджа недостаточно.
Если на сервере есть несколько интерфейсов с адресами из одной и той же подсети, то через какой интерфейс он будет отправлять локально генерируемые пакеты? Если не ошибаюсь, то, если есть несколько маршрутов к одной и той же подсети, выбирается маршрут с наибольшим приоритетом, или, если приоритеты одинаковые (а по умолчанию это так), то маршрут, добавленный в таблицу маршрутизации первым.
Если это на самом деле так, то получается, что нельзя иметь адреса на двух субинтерфейсах сразу (будет использоваться только один); а если есть адрес на субинтерфейсе (-ах) и на br0, то надо сделать так, чтобы всегда использовался только br0. Как минимум, это неудобно.
Если IP-адрес задан на субинтерфейсе, то возникает ещё такая проблемка: пакеты, генерируемые сервером, уходят через субинтерфейс, но ответные пакеты будут передаваться сетевому уровню стека через br0.
По-моему, тогда может сработать RPF, reverse path filtering (маршрут до отправителя пакета, например до компа в локалке, проходит через eth1, т.е., не через тот интерфейс, через который пакет был принят — br0; это подозрительно, поэтому пакет отбрасывается).
Правда, это можно попытаться обойти:
вариант 1 — отключить RPF через sysctl;
вариант 2 — с помощью ebtables/arptables создать правило типа "не пропускать пакеты через br0, а сразу отдавать сетевому уровню через eth1".
Не знаю, какие ещё грабли могут возникнуть, кроме перечисленных.
В общем, надо юзать п. 2. |
|
|
|
|
zir Форумчанин |
|
А, да, есть ещё патч ядра by Julian Anastasov "IP Mode for Linux Bridging" — тоже что-то на тему адресов на субинтерфейсах. |
|
|
|
|
akirill Продвинутый форумчанин |
|
Под линуксом не делал, но под виндой 100 раз, вот схема (может поможет) :
1) комп сетевуха
2) комп (виртБокс Хост-интерфейс)
3) объединяем 1 и 2 в мост даем ип 192.168.1.2 (это ип компа)
4) виртБокс винда даем ип 192.168.1.3 (это ип ос в виртуал боксе) |
|
|
|
|
ProFfeSsoRr Гуру |
|
Цитата: |
но под виндой 100 раз |
что, это еще и под виндой так делается? Теперь я понимаю, почему vmware workstation стоит столько денег: там просто ставишь переключатель в bridged network и все. Сеть уже есть.
Цитата: |
В общем, надо юзать п. 2. |
поюзал. Результат как и прежде нулевой |
|
|
|
|
zir Форумчанин |
|
А XP кого-нибудь видит?
Можно посмотреть вот это?
Код: |
# brctl show ANY
# ip addr ls (или ifconfig)
# ip ro ls (или route -n)
|
dmesg ничего интересного не показывает?
Может, вот так сделать?
Цитата: |
No traffic gets trough (except ARP and STP)
Your kernel might have ethernet filtering (ebtables, bridge-nf, arptables) enabled, and traffic gets filtered. The easiest way to disable this is to go to /proc/sys/net/bridge. Check if the bridge-nf-* entries in there are set to 1; in that case, set them to zero and try again.
Код: |
# cd /proc/sys/net/bridge
# ls
bridge-nf-call-arptables bridge-nf-call-iptables
bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged
# for f in bridge-nf-*; do echo 0 > $f; done |
|
Ещё есть такая фишка, что после того, как интерфейс добавлен в бридж и поднят, проходит 15 с, прежде чем он начинает передавать трафик (если не сделать предварительно "brctl setfd br0 0") — на всякий случай напоминаю |
|
|
|
|
ProFfeSsoRr Гуру |
|
Может я что-то упустил. Итак: ifconfig:
Код: |
br0 Link encap:Ethernet HWaddr 00:11:95:fc:70:63
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:66 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7790 (7.6 KB) TX bytes:126 (126.0 B)
eth0 Link encap:Ethernet HWaddr 00:1a:4d:5a:12:9b
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:51114787 errors:0 dropped:0 overruns:0 frame:0
TX packets:61605656 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3627587320 (3.3 GB) TX bytes:3870390113 (3.6 GB)
Interrupt:219 Base address:0x6000
eth1 Link encap:Ethernet HWaddr 00:11:95:fc:70:63
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:26568462 errors:0 dropped:0 overruns:0 frame:0
TX packets:61456524 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:287105372 (273.8 MB) TX bytes:3989543498 (3.7 GB)
Interrupt:18 Base address:0x4000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:29961 errors:0 dropped:0 overruns:0 frame:0
TX packets:29961 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3737016 (3.5 MB) TX bytes:3737016 (3.5 MB)
ppp0 Link encap:Point-to-Point Protocol
inet addr:90.189.142.25 P-t-P:213.228.116.7 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:1747228 errors:0 dropped:0 overruns:0 frame:0
TX packets:2130589 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:421360878 (401.8 MB) TX bytes:2741276566 (2.5 GB)
tap1 Link encap:Ethernet HWaddr 00:ff:ba:d7:ec:bc
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:58 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:2 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:8218 (8.0 KB) TX bytes:42 (42.0 B) |
route:
Код: |
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
nsk-bbar1.ncc.s * 255.255.255.255 UH 0 0 0 ppp0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 br0
default * 0.0.0.0 U 0 0 0 ppp0 |
И скриптик, которым я запускаю/останавливаю туннель и прочее:
Код: |
#!/bin/sh
case $1 in
start)
tunctl -t tap1 -u dom
chmod 0666 /dev/net/tun
brctl addbr br0
#brctl setfd br0 0 не помогло и решил пока отключить
ifconfig eth1 inet 0.0.0.0 promisc
brctl addif br0 eth1
ifconfig br0 192.168.0.1 up
brctl addif br0 tap1
ifconfig tap1 up
;;
stop)
ifconfig br0 down
brctl delbr br0
ifconfig tap1 down
tunctl -d tap1
ifconfig eth1 down
ifconfig eth1 192.168.0.1 up
;;
esac |
Что еще нахимичить можно я уж и не знаю даже
Цитата: |
А XP кого-нибудь видит? |
Не-а, и ХР не видят, и ХР никого не видит |
|
|
|
|
ProFfeSsoRr Гуру |
|
Покопался я на форуме убунты, и вообще в инете - народ говорит что все это как-то мутно и непонятно работает Так что пока забил я с настройкой, буду ждать выхода Mint 5 KDE CE, ставить его на сервер и вот тогда уже любой ценой настраивать все, чтобы работало именно так, как мне нужно. А пока переживу (ибо ждать мне около месяца, а может и меньше). |
|
|
|
|
ProFfeSsoRr Гуру |
|
Н-дя, проблему я решил достаточно тривиально: поставил vmware server. Он также бесплатен, как и VirtualBox, но работает постабильнее, и побыстрее. И с сетью никаких проблем: при установке программы соглашаешься на создание соединения бриджом, выбираешь сеть, к которой мост пристыкуется, и все работает. Так же можно и NAT добавить, и еще какой-то режим, и несколько соединений создать... И все работает сразу же! Но у vmware server нет режима объединения хостового и гостевого рабочих столов. Но ничего, обойдусь, все равно эта функция не очень хорошо у меня работала. |
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|