2015-02-02 6 views
4

Проблема: Каждый компьютер в той же сети должен иметь возможность транслировать все элементы, включая себя.Многоадресная рассылка с `socat` в Vagrant & VirtualBox Env ​​

Это попытка получить многоадресную рассылку с socat с виртуальными машинами, созданными в Vagrant. & VirtualBox Envrionment. Кажется, здесь все по-другому работает, поэтому я сначала попытался посмотреть, как многоадресная рассылка работает на физических машинах.

У меня есть 3 физических машины с установленным на них сервером ubuntu 12.04 и названы как pc0, pc1 и pc2.

На каждой машине я бегу: socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200

... и когда я напечатал hi from pc0 из pc0, он транслировался в себе и другие 2 машины, и это то, что я хотел (а я надеюсь, что это как групповой должен работать):

[email protected]:~$ socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200 
hi from pc0 
hi from pc0 

[email protected]:~$ socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200 
hi from pc0 

[email protected]:~$ socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200 
hi from pc0 

Я использую IP 224.0.0.1, как это используется по умолчанию для многоадресной передачи на каждой машине.

Далее я попытался реализовать тот же материал с 3 виртуальными машинами, vb0, vb1 и vb2. Github repo - here.

Теперь я пытался вещать из vb0:

[email protected]:~$ socat STDIO UDP-DATAGRAM:224.0.0.1:2200,bind=:2200 
hello from vb0 
hello from vb0 

... и не транслирует другим членам (как в случае физических машин выше), за исключением самого себя.

Кажется, есть дополнительные настройки должны быть сделаны перед иметь эту работу ...

Vagrantfile:

Vagrant.configure(2) do |config| 

    config.vm.box = "ubuntu-12.04-x64" 
    config.vm.synced_folder ".", "/vagrant", disabled: true 

    config.vm.provider "virtualbox" do |vb| 
     vb.cpus = "2" 
     vb.memory = "4096" 
    end 

    config.vm.provision "chef_apply" do |chef| 
     chef.recipe = File.read("recipe.rb") 
    end 

    config.vm.define "vb0" do |vb0| 
     vb0.vm.hostname = "vb0" 
     vb0.vm.network "private_network", ip: "10.20.30.100" 
    end 

    config.vm.define "vb1" do |vb1| 
     vb1.vm.hostname = "vb1" 
     vb1.vm.network "private_network", ip: "10.20.30.101" 
    end 

    config.vm.define "vb2" do |vb2| 
     vb2.vm.hostname = "vb2" 
     vb2.vm.network "private_network", ip: "10.20.30.102" 
    end 

end 

ответ

3

Запуск на каждом устройстве (т.е. vb01, vb1 и vb2):

sudo ip route add 224.0.0.0/4 dev eth1

решена проблема.

В физической среде он работает, не делая этого. Не знаю, зачем нам запускать это в виртуальной среде, как этот.

[email protected]:~$ route 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
default   10.0.2.2  0.0.0.0   UG 100 0  0 eth0 
10.0.2.0  *    255.255.255.0 U  0  0  0 eth0 
10.20.30.0  *    255.255.255.0 U  0  0  0 eth1 
224.0.0.0  *    240.0.0.0  U  0  0  0 eth1 

Полезные ссылки http://troglobit.github.io/multicast-howto.html

+0

ли вы выяснить, почему команда IP маршрут был нужен? –

 Смежные вопросы

  • Нет связанных вопросов^_^