Ponte transparente de WiFi existente para Ethernet?

0

Eu vi muitos exemplos que transformam a máquina de ponte em outro roteador com seu próprio servidor DHCP, etc. Mas eu quero usar um dispositivo com fio como se estivesse conectado diretamente ao roteador original. A máquina de ponte não tem problemas para se conectar ao WiFi por conta própria.

Esta resposta parece estar próxima do que eu quero, mas também diz, The wlan0 interface also has to be condigured to connect to your remote AP so this configuration is not be used verbatim.

Fiel ao aviso, ele não funciona sozinho - não consegue encontrar o adaptador WiFi, por isso não pode se conectar -, mas não diz como restabelecer a conexão original em funcionamento. Como eu faço isso?

/etc/wpa_supplicant/wpa_supplicant.conf é:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="MyNetwork"
    psk="MyPassword"
    key_mgmt=WPA-PSK
}

Quando o WiFi funciona, /etc/network/interfaces é o padrão:

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

E o resultado de ifconfig :

pi@FCC-FOH:~ $ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.35  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::c39b:c8ac:86c9:1f0e  prefixlen 64  scopeid 0x20<link>
        inet6 2600:100a:b02f:8196:b8ae:3d20:c4d0:817c  prefixlen 64  scopeid 0x0<global>
        ether 00:f0:00:36:1f:1a  txqueuelen 1000  (Ethernet)
        RX packets 17  bytes 1955 (1.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 52  bytes 7956 (7.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@FCC-FOH:~ $ 

Quando tento ativar a ponte, /etc/network/interfaces é:

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0

E o resultado de ifconfig :

pi@FCC-FOH:~ $ ifconfig
br0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:4c:6c:a7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:f0:00:36:1f:1a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@FCC-FOH:~ $ 
    
por AaronD 08.06.2018 / 04:01

2 respostas

2

Eu entendi! Apenas precisávamos de alguns pequenos ajustes de ponto de partida , que parece traduzir uma direção, mas não a outra. O preenchimento na outra direção fez com que ele "clicasse".

Aparentemente, você não pode usar o DHCP por meio desse tipo de ponte por motivos que ainda não entendo completamente (dispositivo com fio em uma rede WiFi), mas se você está bem com endereços estáticos para a ponte e para o dispositivo , funciona. Aqui está como eu fiz:

Adicione isso em /etc/network/interfaces :

auto eth0
auto lo wlan0
iface lo inet loopback

# We're going to play router on this interface, so set that address
iface eth0 inet static
    address 192.168.3.1
    netmask 255.255.255.0

# Setup WiFi and take a static address, so we know the context
allow-hotplug wlan0
iface wlan0 inet static
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    address 192.168.2.5
    netmask 255.255.255.0
    gateway 192.168.2.1

# Take a second address, so we can bridge it to the single device at 192.168.3.x
iface wlan0 inet static
    address 192.168.2.6

Adicione isso em /etc/rc.local :

# Match settings in /etc/network/interfaces
IP_THIS="192.168.2.6"
IP_OTHR="192.168.3.6"

# Actual work
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING  -d $IP_OTHR -i  eth0 -j DNAT --to-destination $IP_THIS
iptables -t nat -A PREROUTING  -d $IP_THIS -i wlan0 -j DNAT --to-destination $IP_OTHR
iptables -t nat -A POSTROUTING -s $IP_THIS          -j SNAT --to-source      $IP_OTHR
iptables -t nat -A POSTROUTING -s $IP_OTHR          -j SNAT --to-source      $IP_THIS

Certifique-se de que /etc/wpa_supplicant/wpa_supplicant.conf inclua isto:

network={
    ssid="MyNetwork"
    psk="MyPassword"
    key_mgmt=WPA-PSK
}

Poderia estar lá já, se você já estiver conectado através de um utilitário gráfico, mas tenha certeza de qualquer maneira. Modifique conforme necessário para sua rede.

Defina o dispositivo em ponte como estático:

address: 192.168.3.6
netmask: 255.255.255.0
gateway: 192.168.3.1

e seus alvos, se houver, na rede 192.168.2.x como se estivessem diretamente nessa rede.

Parece estranho comunicar-se com algo fora de sua própria sub-rede, mas quando a ponte faz a sua tradução ( iptables ), ela fica correta.

Da mesma forma, configure qualquer coisa na rede principal para usar o segundo endereço da ponte, não o endereço real, para falar com o dispositivo em ponte.

Use um cabo cruzado para conectar o dispositivo à ponte e, depois de reinicializar a ponte, ela deve "funcionar". (ou pelo menos para mim)

A estrutura resultante é:

Router:
addr: 192.168.2.1
ssid: MyNetwork
pass: MyPassword
auth: WPA2
dhcp: 100+

Target for Bridged Device
addr: 192.168.2.2

Bridge
addr: 192.168.2.5 (WiFi primary - used for the Bridge Machine itself)
addr: 192.168.2.6 (WiFi secondary - forwards to Bridged Device)
addr: 192.168.3.1 (Wired - "plays router" for Bridged Device)

Bridged Device
addr: 192.168.3.6

É claro que você pode alterar esses endereços conforme necessário, mas certifique-se de mantê-los todos em ordem.

    
por 09.06.2018 / 07:36
1
Ok, acho que o principal problema aqui foi um problema de comunicação: você estava usando termos que têm um significado muito específico na rede (bridge WLAN to LAN) ao invés de descrever o resultado desejado (eu tenho um dispositivo A sem WLAN e Eu quero conectá-lo ao meu roteador WLAN através de um segundo dispositivo, para que seja alcançável de todos os outros dispositivos na WLAN, e vice-versa). E então, é claro, você obtém uma resposta ajustando os termos com um significado específico (seu Y no problema XY)), que não é o que você queria (seu X).

Qual é o problema do XY: se você perguntar sobre X ao invés de Y, você obtém respostas adequadas. Se você perguntar sobre Y, as pessoas não poderão responder corretamente.

Então, vamos fazer algumas noções básicas sobre redes. O modelo OSI descreve várias camadas de rede. A camada 2 é a camada Ethernet / Wifi: os dispositivos são identificados por um endereço MAC, há um segmento (também chamado de domínio de transmissão) onde todos os dispositivos se vêem e podem enviar mensagens para todos os outros dispositivos nesse segmento. A camada 3, por outro lado, usa endereços da Internet (IP).

Bridging significa conectar dois segmentos da camada 2 para que eles apareçam como um segmento de camada única 2 (para que as transmissões da camada 2 sejam vistas em ambos os segmentos anteriores). Roteamento significa conectar dois segmentos da camada 2 encontrando o próximo destino para um pacote na camada 3 e, em seguida, encaminhando este pacote para este destino na camada 2.

Agora a WLAN foi projetada para permitir vários pontos de acesso em um segmento da camada dois (chamado sistema de distribuição (DS)):

<--- SEGMENT (DS) --->  <- SEGMENT ->

    LAN         WLAN        LAN 
     |      
     |           .....C1------------D
     |---- B1 ....
A----|           .....C2
     |
     |---- B2 ..
     |

A é o gateway do DS, B1 e B2 são pontos de acesso (APs), C1 e C2 são estações (STA), D é um computador conectado a C1 via LAN.

Simplificando um bit, os pacotes enviados via WLAN contêm os endereços MAC para A, B e C (modo de 3 endereços). Por causa disso, o AP pode interligar os adaptadores WLAN e LAN, formando um único segmento: Se C quiser enviar um pacote de camada 2 diretamente para A, ele sabe que está associado a B, então ele pode colocar endereços (A, B, C ) no pacote. Quando B recebe o pacote, ele vê que o destino final é A, então ele pode simplesmente enviá-lo novamente na interface LAN em ponte. E da mesma forma na outra direção.

Agora, o que acontece se o STA C tentar fazer o mesmo e conectar LAN e WLAN? Então, quando D envia um pacote de camada 2 para A, que endereços o C deve colocar no pacote de WLAN? Pode colocar (A, B, D). Se a comunicação não for criptografada, o AP B diz "ei, esse pacote vem de D, mas eu não estou associado a D. Então esse pacote deve ter dado errado, vamos soltá-lo". Pior ainda, se a comunicação estiver criptografada (o que deve ser o padrão hoje), a chave é negociada entre o AP e o STA. Mas C só tem a chave <B,C> , não a chave <B,D> . Portanto, este pacote não pode ser devidamente criptografado.

E se C apenas colocar seu próprio endereço MAC? Então, para os pacotes indo para D, eles também serão endereçados para C. Então, C tem que decidir como distinguir entre encaminhar pacotes para D e aceitar esses pacotes. Isso é difícil de fazer, porque na camada 2 não há muita informação para fundamentar essa decisão. É por isso que, nesse caso, você acaba com C "desaparecendo", enquanto D parece estar diretamente conectado a B. Esta é a solução implementada pelo WLAN_KABEL. Variações disso baseiam essa decisão nas portas (camada 3) usadas, etc.

Outra opção é apenas colocar todos os endereços envolvidos (A, B, C, D) em vez de apenas (A, B, C). Isso é chamado de modo de quatro endereços, ou às vezes um sistema de distribuição sem fio (WDS; cuidado, o WDS também é usado para outras formas proprietárias de fazer algo semelhante).

Agora, você sabe por que é possível interligar LAN e WLAN em uma STA.

Se você não quiser ligar , e apenas manter os segmentos como na imagem, então tudo se torna simples: Você rotear , e apenas adicionar ) tabelas de roteamento para D em A e todas as Bs, e assim, torna-se acessível. Como os endereços IP da camada 3 são atribuídos com base em segmentos, apenas terá um endereço em um intervalo diferente. Por exemplo, o segmento WLAN é 192.168.23.0/24, digamos que A é 192.168.23.1, B1 é 192.168.23.2, B2 é 192.168.23.3, C1 é 192.168.23.100 e C2 é 192.168.23.101; e o segmento de LAN entre C1 e D tem C1 como 10.0.0.1 e D como 10.0.0.2. Então C2 pode apenas dizer "envie um pacote de camada 3 para 10.0.0.2" e ele chegará bem. Nenhum NAT necessário.

Note que na maioria das redes domésticas, há apenas um único AP (e poucas pessoas sabem como configurar vários APs adequadamente, e fazem coisas horríveis como NAT duplo, se quiserem vários APs) e seu roteador doméstico combina A e B em um único dispositivo. Mas o protocolo ainda é como descrito acima.

Você encontrará vários APs configurados como descrito em hotéis etc., onde os profissionais fizeram a instalação.

    
por 10.06.2018 / 08:37