Compreendendo o roteamento e o gateway do WiFi

2

Estou completamente perdida. Eu sou um verdadeiro iniciante sobre redes Linux.

O que estou tentando realizar:

Como Bobstro disse, eu quero permitir que uma câmera UPnP conectada via Wi-Fi seja movida entre redes wi-fi. O RPI está conectado a essas redes, a câmera está conectada ao RPi. Mas o RPi não é um ponto de acesso. Ele está conectado a um servidor via TCP ou websocket e recebe pedidos para tirar fotos pela câmera. Em seguida, envia de volta a imagem via websocket ou TCP.

Minha situação:

Eu tenho três interfaces no meu Raspberry Pi: eth0, wlan0 e wlan1 (2 dongles USB Wi-Fi).

  • O wlan1 será usado para se conectar a uma câmera Wi-Fi via SSDP.

  • wlan0 será usado para ter uma conexão TCP com um servidor (ip / domain nome conhecido). Eu não sei nada sobre a rede Wi-Fi wlan0 é conectado ao via DHCP. Isso pode mudar de tempos em tempos. Não faz conheça o gateway especialmente.

  • eth0 será usado para depurar o acesso SSH, através do meu MacBook Air serviço de compartilhamento de conexão pelo exemplo.

        Server <---> Internet <--wlan0--> RPI <--wlan1--> Camera
                                           |
                                          etho
                                           |
                                        Macbook

Atualmente, todas essas interfaces estão ativas. Aqui está a saída ifconfig (wlan1 e eth0 estão na mesma rede, mas isso não será o caso no futuro):

eth0      Link encap:Ethernet  HWaddr b8:27:eb:8c:e2:10
          inet addr:192.168.0.19  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1174 errors:0 dropped:0 overruns:0 frame:0
          TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:93616 (91.4 KiB)  TX bytes:12342 (12.0 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr c0:4a:00:2a:ab:6c
          inet addr:192.168.43.44  Bcast:192.168.43.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1142 (1.1 KiB)  TX bytes:1145 (1.1 KiB)

wlan1     Link encap:Ethernet  HWaddr 74:da:38:0c:c6:f0
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1480 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:222449 (217.2 KiB)  TX bytes:29711 (29.0 KiB)

E aqui está a saída de sudo route -n :

0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

E aqui /etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
        post-up route del default dev wlan0

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "wifi1"
        wpa-psk "psw1"

auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
        wpa-ssid "wifi2"
        wpa-psk "pwd2"

Se eu entendi corretamente o que li nas últimas 24 horas, preciso fazer coisas de roteamento. Mas eu não entendo o que e como.

Eu tenho que mudar a rota padrão? Se sim, como posso conseguir fazer que desde que eu não conheço o gateway para wlan0 ou wlan1 antes conectando-se à rede? Isso é um problema impossível de resolver?

Esta postagem pode ser uma duplicata; mas desde ontem eu encontrei nada de útil, então pelo menos eu preciso de ajuda para encontrar um original postar. :)

Edit: Como Goldilocks mencionou, minha pergunta é ampla. estou realmente desculpa. Eu não sei nada sobre networking. Eu não sei como dividir isso em perguntas mais específicas.

Então, talvez uma primeira tentativa fracassada:

Eu tentei sudo ip route del default remover a eth0 padrão gateway. Então sudo ip route add default dev wlan0 , o comando funciona mas resulta nesta tabela de roteamento:

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 wlan0

considerando que eu quero que o Raspberry Pi encontre o IP do roteador wi-fi wlan0 (eu não sei e poderia mudar) e usá-lo como gateway. Seria um bom primeiro passo.

Editar 2: wlan1 está agora na rede 192.168.2.x.

    
por Guillaume Wuip 12.05.2015 / 19:52

3 respostas

1

Então, parece que consegui encontrar uma solução (temporária?) em que wlan0 é a rota padrão. Eu não preciso conhecer o gateway wifi.

A chave é seguir a ideia @goldilocks para os processos de roteamento de scripts. Mas esta solução permite manter eth0 e wlan1 em execução no dhcp.

Então, adicionei o arquivo /etc/dhcp/dhclient-enter-hooks.d/post-wlan0 (e chmod +x a ele), que contém:

# post-wlan0 script
# Goal : activate default route via wlan0 after wlan0 is up

#echo  "post-wlan0 start" >> /tmp/testwlan0.debug
if [ "$interface" = "wlan0" ]; then

        #echo  "wlan0 detected" >> /tmp/testwlan0.debug
        if [ -n "$new_routers" ] ; then

                #echo  "setting route" >> /tmp/testwlan0.debug

                sudo ip route del default
                sudo ip route add default via $new_routers dev wlan0

        fi
fi

Na verdade, esse script é um gancho que é acionado quando o cliente dhcp está funcionando. Veja /etc/dhcp/dhclient-enter-hooks.d/debug para mais informações.

Portanto, quando wlan0 estiver ativo, ele removerá a rota padrão antiga e adicionará uma nova com o wlan0 router ip ( $new_routers ).

Saída de sudo route -n :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.43.1    0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan1
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

Eu posso fazer ping em um dispositivo em eth0 ou wlan1 networks. E estou navegando via eth0 .

@goldilocks e @bobstro: Muito obrigado pela sua ajuda! Esta solução parece boa para você?

Minha configuração:

/etc/network/interfaces :

auto lo
iface lo inet loopback

# Connection to the world
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "wifi1"
        wpa-psk "pwd1"

# Debugging connection
auto eth0
iface eth0 inet dhcp

# Connection to the future camera
auto wlan1
allow-hotplug wlan1
iface wlan1 inet dhcp
        wpa-ssid "wifi2"
        wpa-psk "pwd2"

Saída de ifconfig :

eth0      Link encap:Ethernet  HWaddr b8:27:eb:8c:e2:10  
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1371 errors:0 dropped:0 overruns:0 frame:0
          TX packets:494 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:145112 (141.7 KiB)  TX bytes:87219 (85.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr c0:4a:00:2a:ab:6c  
          inet addr:192.168.43.44  Bcast:192.168.43.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:230 errors:0 dropped:0 overruns:0 frame:0
          TX packets:323 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:22412 (21.8 KiB)  TX bytes:32270 (31.5 KiB)

wlan1     Link encap:Ethernet  HWaddr 74:da:38:0c:c6:f0  
          inet addr:192.168.0.14  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1942 errors:0 dropped:1 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:305388 (298.2 KiB)  TX bytes:3302 (3.2 KiB)

Editar: solução testada com um dispositivo UPnP em algum lugar em wlan1 . Eu tive que adicionar a rota sudo ip route add 239.255.255.250 dev wlan1 para a descoberta do UPnP passar pela boa interface.

Eu usei este código NodeJS para teste.

    
por 13.05.2015 / 09:29
1

Eu posso dar-lhe uma espécie de resposta parcial que tem a ver com como eu abordaria isso, com a ressalva de que eu não uso um serviço de configuração de rede na inicialização; Eu apenas escrevo meus próprios roteiros para conseguir o que eu quiser.

Dito isso, para testar isso, você pode simplesmente comentar tudo em /etc/network/interfaces , exceto lo e wlan0 , usando o último como sua rota padrão com o DHCP. Isso deve significar que o sistema é inicializado dessa maneira. A configuração para isso eu vou deixar para você descobrir, mas há um problema: você tem que saber que essa máscara de sub-rede não colide com os outros. Tudo isso tem que ser diferente. Presumivelmente, há dois que estão sob seu controle ou podem ser conhecidos antecipadamente.

O primeiro é a sub-rede de câmeras SSDP, e um problema aqui é obter dhclient para configurar uma concessão para isso quando já estiver mantendo um em wlan0. Você acha que isso seria fácil, mas depois de olhar um pouco, parece que não é. Você poderia tentar isso , mas na minha opinião há dois talvez soluções menos complicadas:

  • Use um IP estático. Esta é certamente a maneira mais fácil e infalível.
  • Use dhcpcd e / em vez de dhclient . Eu não sei como fazer isso, mas parece ser possível.

Usar um IP estático é mais fácil porque também significa que você pode codificá-lo. Presumindo que esta sub-rede é 192.168.0.0/24 e o ip é 192.168.0.101:

ip link set wlan1 up
wpa_supplicant -B -c /path/to/essid/config -i wlan1
ip addr add 192.168.0.101 dev wlan1
ip route add 192.168.0.0/24 via 192.168.0.101

Então é praticamente o mesmo com a conexão eth ao Mac, com a qual deve ser fácil usar um IP estático:

ip link set eth0 up
ip addr add 192.168.1.10
ip route add 192.168.1.0/24 via 192.168.1.10
    
por 12.05.2015 / 22:26
1

Estou ciente de que você deseja usar o RPi para permitir que uma câmera UPnP conectada via Wi-Fi seja movida entre as redes e use o RPi para se conectar a uma rede sem fio em cada site.

Isso está correto? Existe alguma razão para você não conseguir acessar a câmera diretamente da rede sem o roteamento RPi?

Você tem roteamento ativado no RPi? Para habilitar o roteamento interativamente, use:

sudo echo 1 > / proc / sys / net / ipv4 / ip_forward

Para torná-lo permanente, edite /etc/sysctl.conf e descomente a linha que diz net.ipv4.ip_forward = 1.

sudo nano /etc/sysctl.conf

# Descomente a próxima linha para ativar o encaminhamento de pacotes para o IPv4
 net.ipv4.ip_forward = 1

Olhando para sua configuração, o RPi obterá o endereço para WLAN0 via DHCP, que deve fornecer o gateway padrão.

Você não descreve como a câmera está conectada. Você quer usar o RPi como um ponto de acesso? Nesse caso, você precisa configurar o hostapd e configurar o RPi como um servidor DHCP para que a câmera se conecte ao RPi via wireless e seja atribuído um endereço IP e um gateway padrão apontando para o RPi.

Você provavelmente NÃO deseja que a interface eth0 seja usada como o gateway padrão no RPi, se for para uso exclusivo de diagnóstico.

Você precisa esclarecer exatamente o que está tentando fazer, em vez de nos dizer como tentou fazê-lo. O que você fez pode ser a abordagem errada.

Se isso ajudar, veja como estou usando um RPi configurado da mesma forma:

Uma interface wifi é usada apenas para configurar o RPi. Eu tenho configurado como um ponto de acesso usando hostapd e dnsmasq. Quando coloco o RPi pela primeira vez em um site, conecto-me a este AP do meu MacBook para configurá-lo. Meu MacBook recebe um endereço IP e um gateway padrão apontando para o RPi via dnsmasq. Uma vez configurada, essa interface não é normalmente usada, mas pode ser acessada conforme necessário.

Uma interface wifi é usada para conectar-se à rede do cliente em cada site para acesso remoto. Eu configuro a interface usando wicd-curses e verifico que posso fazer o ping da rede deles. Eu posso então VPN para o site e acessar o RPi. Quando me conecto à rede Wi-Fi do site, meu RPi recebe um gateway padrão apontando para o roteador de Internet do site via DHCP.

A interface com fio é usada para conectar-se à rede de teste. Ele é configurado com um endereço IP fixo via / etc / network / interfaces.

NÃO uso roteamento, pois não desejo tráfego entre as redes. Todo o tráfego termina no RPi. Usando alguns scripts, no entanto, posso ativar o roteamento conforme necessário. Eu tenho scripts para usar o RPi como uma ponte ou roteador NAT, dependendo das minhas necessidades.

Se você puder descrever mais completamente o que você está tentando realizar, uma resposta deve ser direta.

    
por 13.05.2015 / 07:27