Como faço para encaminhar o tráfego multicast entre 2 lans diferentes usando o iptables?

2

Meta:

Precise de lmc ou "LAN Messenger" para trabalhar em 2 lans separados por um gateway Linux usando o iptables.

Informação:

  • Deve ser este programa "LAN Messenger".
  • O LMC usa o endereço multicast 239.255.100.100:50000 para ver os usuários e cria uma conexão tcp para o bate-papo.
  • lan1 = olan1 = 192.168.2.0/24: o gateway é um comutador inteligente "Linksys Etherfast router" com filtro multicast desativado.
  • lan2 = slan1 = 10.10.10.0/24: o gateway é a caixa linux
  • gateway pc = servidor Ubuntu 14. iptables para encaminhar algum tráfego entre lans.

regras de iptable:

tabela de filtros:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i slan1 -o olan1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m iprange --src-range 192.168.2.100-192.168.2.254 -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 9696 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -p igmp -j ACCEPT
-A FORWARD -i olan1 -o slan1 -j DROP

tabela nat:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -j MASQUERAD

Regras que eu pensei que deveriam encaminhar o tráfego multicast:

-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 224.0.0.0/4 -d 224.0.0.0/4 -j ACCEPT
-A FORWARD -p igmp -j ACCEPT

Monitorado o tráfego do gateway usando o tcpdump, nunca vi o tráfego multicast passar enquanto eu alterava as regras de iptable.

O iptables encaminhará o tráfego multicast ic?

Preciso usar um daemon ou proxy de roteamento multicast como pimd ou smcroute ?

    
por jc__ 16.08.2017 / 19:03

2 respostas

1

Acabei de testar smcroute com dois namespaces de rede e dois veth pairs. Configuração:

ns1         <-- main namespace -->    ns2
10.0.0.1 -- 10.0.0.254  10.0.1.254 -- 10.0.1.1
veth0b      veth0a          veth1a    veth1b

O pacote Debian smcroute é a versão 2.0.0, e parece não suportar eth virtual, então eu instalei a versão 2.3.1 do página inicial do smcroute . A rota de multicast como de smcroute também é muito útil.

Eu usei o pacote ssmping para testar multicasts. Eu corri ssmpingd em ns2, enquanto ping com ssmping -4 -I veth0b 10.0.1.1 de ns1. Estes são multicast específicos da fonte (SSM) usando o grupo 232.43.211.234 , você também pode testar multicast de qualquer fonte (ASM) com asmping . Não sei o que o mensageiro de LAN usa.

Eu habilitei o encaminhamento no namespace principal para permitir que as solicitações de ping unicast passem e, em seguida, fiz

smcroutectl add veth1a 10.0.1.1 232.43.211.234 veth0a

e tudo funcionou bem. Eu esperaria que também funcionasse, ajustado à sua configuração, embora você também tenha que smcroutectl join informar aos seus switches que eles devem encaminhar os multicasts adequadamente. Múltiplas janelas do terminal tcpdump em todas as interfaces relevantes ajudam bastante na depuração.

Achei as seguintes informações interessantes:

To be able to setup multicast routes a program must connect to the multicast routing socket in the kernel, when that socket is closed, which is done automatically when a UNIX program ends, the kernel cleans up all routes.

Isto significa que se você pretende usar o recurso de roteamento multicast do kernel, você deve usar um demônio, não uma ferramenta de linha de comando.

Para roteamento estático vs. dinâmico, diz:

The intended purpose of smcroute is to aid in situations where dynamic multicast routing does not work properly. However, a dynamic multicast routing protocol is in nearly all cases the preferred solution. The reason for this is their ability to translate Layer-3 signalling to Layer-2 and vice versa (IGMP or MLD).

Por fim, preste muita atenção no TTL produzido pelo seu mensageiro de LAN, consulte Perguntas frequentes sobre multicast no fim.

    
por 17.08.2017 / 11:07
0

Ok, parece que iptables sozinho NÃO é o caminho a seguir.

Eu tentarei smcroute e / ou pimd dos repositórios do Ubuntu. Até agora não consegui fazer nenhum trabalho.

Usando o smcroute:

iptables

-A INPUT -i lo -j ACCEPT
-A FORWARD -i slan1 -o olan1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p igmp -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p tcp -m tcp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i olan1 -o slan1 -p udp -m udp --dport 50000 -m conntrack --ctstate NEW -j ACCEPT
-A PREROUTING -d 239.255.100.100/32 -j TTL --ttl-set 64

smcroute 2.3.1 do troglobit.

Extraído para /opt

./configure usou as opções padrão.

arquivo de configuração em:

/usr/local/etc/smcroute.conf

#phyint olan1 enable ttl-threshold 1
phyint olan1 enable ttl-threshold 5
phyint slan1 enable ttl-threshold 5
mgroup from olan1 group 239.255.100.100
mgroup from slan1 group 239.255.100.100
mroute from olan1 group 239.255.100.100 to slan1
mroute from slan1 group 239.255.100.100 to olan
  • ttl-threshold - esse limite mínimo?
  • se o TTL no meu pacote é 1 isso significa que o phyint irá ... ignorá-lo. Alterado para 5 apenas no caso.

sudo smcrouted

sudo smcroutectl show groups

GROUP (S,G)                        INBOUND                                                                                                    
(*, 239.255.100.100)               slan1
(*, 239.255.100.100)               olan1

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND                                                                
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(10.10.10.154, 239.255.100.100)    slan1                  2      344  olan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.101, 239.255.100.100)    slan1                  1       32  olan1
(192.168.2.101, 239.255.100.100)   olan1                  1       32  slan1
(10.10.10.1, 239.255.100.100)      slan1                  2       64  olan1

Não é todo mundo ...

Em um computador multi-homed WinXP teve que mudar uma rota:

route add 224.0.0.0 mask 240.0.0.0 10.10.10.153

precisa usar o número da interface no lugar do endereço de IP do nic ...

  • A métrica vai para 1. Este é um problema de TTL ...

sudo smcroutectl show routs

ROUTE (S,G)                        INBOUND          PACKETS    BYTES  OUTBOUND
(*, 239.255.100.100)               slan1                  0        0  olan1
(*, 239.255.100.100)               olan1                  0        0  slan1
(192.168.2.53, 239.255.255.250)    olan1                  4      776 
(10.10.10.153, 239.255.100.100)    slan1                  1       32  olan1

LAN Messenger 1.2.32 network preferences

  • Tempo limite da conexão (segundos) - valor máximo de saída
  • Número máximo de novas tentativas - valor máximo de saída

Faça smcroute um daemon com o Upstart no Ubuntu 14

/etc/init/smcroute.conf

# Upstart for custom compiled smcroute
## jc 2017 08 24
description "SMCRoute, a static multicast router"
author      "jc"
# Stanzas
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
# start on runlevel [2345]
start on (local-filesystems and net-device-up IFACE!=lo) or runlevel [2345]
# When to stop the service
#stop on runlevel [016]
stop on runlevel [!2345]
# Automatically restart process if crashed
expect fork
respawn
exec /usr/local/sbin/smcrouted -N -f /usr/local/etc/smcroute.conf -d 10 -l notice

Tudo parece funcionar. Permitirá que as coisas funcionem por um tempo com reinicializações aleatórias e ocasionais falhas de rede, coisas normais.

TODO

  • Faça um smcroute em um daemon
  • Tornar adições de rota persistentes
  • Verifique se a regra iptables ... é necessária
  • Faça o Win7 pc ver a sub-rede
por 16.08.2017 / 23:13