OpenWrt: como dar aos clientes wlan @ 10.x Acesso à Internet via gateway @ 192.168.1.254

3

Desejo isolar os convidados que se conectam à minha rede Wi-Fi à sub-rede 10.0.0.x, dando a eles acesso à Internet. O roteador OpenWrt está em 192.168.1.48 (a interface "wifi" tem 10.0.0.1) e meu gateway está em 192.168.1.254. Como eu iria em torno de configurar o OpenWrt para que os hóspedes acessem a Internet através do meu gateway, mas permaneçam confinados à 10. sub-rede?

Eu li a receita do guest-wlan no wiki do OpenWrt, mas não consigo descobrir como fazer o que quero fazer. Até agora eu consegui configurar um servidor DHCP para os hóspedes que distribui endereços 10.x.

Também notei que posso resolver nomes de host de um laptop na rede 10.x. A partir dos logs do dnsmasq eu posso ver que existe um servidor de nomes em 192.168.1.254 (porque eu observei no /etc/resolv.conf). Mas como e por que os pacotes estão cruzando o firewall?

Estou executando o Backfire 10.03.1 em um WRT54GL. O gateway é um Linksys E4200. Esta é a minha configuração OpenWrt no momento:

/ etc / config / dhcp

config 'dnsmasq'
        option 'domainneeded' '1'
        option 'boguspriv' '1'
        option 'filterwin2k' '0'
        option 'localise_queries' '1'
        option 'rebind_protection' '1'
        option 'rebind_localhost' '1'
        option 'local' '/lan/'
        option 'domain' 'lan'
        option 'expandhosts' '1'
        option 'nonegcache' '0'
        option 'authoritative' '1'
        option 'readethers' '1'
        option 'leasefile' '/tmp/dhcp.leases'
        option 'resolvfile' '/tmp/resolv.conf.auto'

config 'dhcp' 'lan'
        option 'interface' 'lan'
        option 'ignore' '1'

config 'dhcp' 'wan'
        option 'interface' 'wan'
        option 'ignore' '1'

config 'dhcp'
        option 'start' '100'
        option 'leasetime' '12h'
        option 'limit' '150'
        option 'interface' 'wifi'

/ etc / config / network

config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

config 'interface' 'lan'
        option 'ifname' 'eth0.0'
        option 'proto' 'static'
        option 'netmask' '255.255.255.0'
        option 'ipaddr' '192.168.1.48'
        option 'gateway' '192.168.1.254'
        option 'dns' '192.168.1.254'

config 'interface' 'wan'
        option 'ifname' 'eth0.1'
        option 'proto' 'dhcp'

config 'interface' 'wifi'
        option 'proto' 'static'
        option 'ipaddr' '10.0.0.1'
        option 'netmask' '255.255.255.0'

/ etc / config / wireless

config 'wifi-device' 'wl0'
        option 'type' 'broadcom'
        option 'channel' '11'

config 'wifi-iface'
        option 'device' 'wl0'
        option 'mode' 'ap'
        option 'ssid' 'OpenWrt'
        option 'encryption' 'none'
        option 'network' 'wifi'

/ etc / config / firewall (não mudou do padrão)

config defaults
        option syn_flood        1
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT
# Uncomment this line to disable ipv6 rules
#       option disable_ipv6     1

config zone
        option name             lan
        option network          'lan'
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT

config zone
        option name             wan
        option network          'wan'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT
        option masq             1
        option mtu_fix          1

config forwarding
        option src              lan
        option dest             wan

# We need to accept udp packets on port 68,
# see https://dev.openwrt.org/ticket/4108
config rule
        option name             Allow-DHCP-Renew
        option src              wan
        option proto            udp
        option dest_port        68
        option target           ACCEPT
        option family           ipv4

# Allow IPv4 ping
config rule
        option name             Allow-Ping
        option src              wan
        option proto            icmp
        option icmp_type        echo-request
        option family           ipv4
        option target           ACCEPT

# Allow DHCPv6 replies
# see https://dev.openwrt.org/ticket/10381
config rule
        option name             Allow-DHCPv6
        option src              wan
        option proto            udp
        option src_ip           fe80::/10
        option src_port         547
        option dest_ip          fe80::/10
        option dest_port        546
        option family           ipv6
        option target           ACCEPT

# Allow essential incoming IPv6 ICMP traffic
config rule
        option name             Allow-ICMPv6-Input
        option src              wan
        option proto    icmp
        list icmp_type          echo-request
        list icmp_type          destination-unreachable
        list icmp_type          packet-too-big
        list icmp_type          time-exceeded
        list icmp_type          bad-header
        list icmp_type          unknown-header-type
        list icmp_type          router-solicitation
        list icmp_type          neighbour-solicitation
        option limit            1000/sec
        option family           ipv6
        option target           ACCEPT

# Allow essential forwarded IPv6 ICMP traffic
config rule
        option name             Allow-ICMPv6-Forward
        option src              wan
        option dest             *
        option proto            icmp
        list icmp_type          echo-request
        list icmp_type          destination-unreachable
        list icmp_type          packet-too-big
        list icmp_type          time-exceeded
        list icmp_type          bad-header
        list icmp_type          unknown-header-type
        option limit            1000/sec
        option family           ipv6
        option target           ACCEPT

# include a file with users custom iptables rules
config include
        option path /etc/firewall.user


### EXAMPLE CONFIG SECTIONS
# do not allow a specific ip to access wan
#config rule
#       option src              lan
#       option src_ip   192.168.45.2
#       option dest             wan
#       option proto    tcp
#       option target   REJECT

# block a specific mac on wan
#config rule
#       option dest             wan
#       option src_mac  00:11:22:33:44:66
#       option target   REJECT

# block incoming ICMP traffic on a zone
#config rule
#       option src              lan
#       option proto    ICMP
#       option target   DROP

# port redirect port coming in on wan to lan
#config redirect
#       option src                      wan
#       option src_dport        80
#       option dest                     lan
#       option dest_ip          192.168.16.235
#       option dest_port        80
#       option proto            tcp


### FULL CONFIG SECTIONS
#config rule
#       option src              lan
#       option src_ip   192.168.45.2
#       option src_mac  00:11:22:33:44:55
#       option src_port 80
#       option dest             wan
#       option dest_ip  194.25.2.129
#       option dest_port        120
#       option proto    tcp
#       option target   REJECT

#config redirect
#       option src              lan
#       option src_ip   192.168.45.2
#       option src_mac  00:11:22:33:44:55
#       option src_port         1024
#       option src_dport        80
#       option dest_ip  194.25.2.129
#       option dest_port        120
#       option proto    tcp

Eu percebo que esta é mais uma questão de rede geral do que uma questão do OpenWrt, mas eu pensei que deveria mencionar o OpenWrt. Eu tenho a menor idéia de que fazer este trabalho envolve alguns iptables magia negra, mas eu não consigo descobrir os encantamentos corretos, então eu queria pedir ajuda.

Obrigado antecipadamente!

    
por Pete 12.03.2013 / 15:05

1 resposta

3

Teve a situação exata como você, exceto pelo gateway (Cisco RV042G). No entanto, minha solução provavelmente não funcionará no E4200 devido à falta de recursos. Se for possível usando outros métodos, então está além do meu conhecimento. Estou adicionando a resposta para outras pessoas que podem estar procurando por uma solução como essa.

Vamos supor que 10.0.0.0/24 seja sua rede principal com o endereço de gateway 10.0.0.1 e 10.0.1.0/24 é a rede convidada. Etapas para reproduzir minha solução:

  • Crie uma sub-rede diferente para os convidados no gateway. O gateway deve suportar esse recurso, pois cria várias tabelas NAT para rotear o tráfego da Internet para a sub-rede apropriada.
  • Adicione uma regra de firewall para bloquear todo o tráfego de 10.0.1.0/24 a 10.0.0.0/24 no gateway.
  • Use uma compilação do OpenWrt com o kernel 2.6+. O brcm-2.4 builds não será devido à falta de suporte ao ebtables. Eu usei uma build 12.06 com uma configuração baseada na configuração padrão brcm47xx. Com o opkg de imagem padrão não funciona enquanto eu não tentei 10.03. Eu recomendo um Debian 7 i386 para buildroot, já que perdi horas suficientes da minha vida com amd64 e vários erros aleatórios de compilação. Você pode usar o ImageBuilder, eu acho, mas eu não tentei. Para ebtables você precisa dos seguintes pacotes: ebtables, ebtables-utils, kmod-ebtables-ipv4. O módulo do kernel não é adicionado automaticamente como dependência , portanto tenha cuidado.
  • Estas regras ebtables abaixo em /etc/firewall.user para bloquear a transmissão DHCP do gateway, se o gateway não suportar vários pools DHCP. RV042G não. Encontrou-os nos fóruns do OpenWrt, adaptou-os para o 12.06, que usa eth0.0 como nome de interface para o lan VLAN.

ebtables -F

ebtables -A INPUT --in-interface eth0.0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

ebtables -A INPUT --in-interface eth0.0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP

ebtables -A FORWARD --in-interface eth0.0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP

ebtables -A FORWARD --in-interface eth0.0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

  • Opcional: Configure a interface lan para a sub-rede secundária. Você precisa alterar o endereço se o gateway e o OpenWrt AP usarem os padrões (192.168.1.1).

config interface lan

option type bridge

option ifname "eth0.0"

option proto static

option ipaddr 10.0.1.2

option netmask 255.255.255.0

option gateway 10.0.1.1

option dns "8.8.8.8 8.8.4.4"

  • Diga ao servidor DHCP qual gateway deve ser transmitido, como normalmente usaria o ipaddr da configuração da interface de lan:

config dhcp lan

option interface lan

option start 100

option limit 100

option leasetime 1h

list 'dhcp_option' '3,10.0.1.1'

  • Configure o wireless como um ponto de acesso regular. Opcional: criptografia (recomendado), isolamento do cliente (também recomendado).

Encontrei apenas um problema com essa configuração: um convidado ainda pode entrar na sua rede principal se a sub-rede dessa rede for "adivinhada" e a configuração da rede for feita manualmente para a interface sem fio. Dado o fato de que os convidados ainda veem as transmissões arp da rede principal, não é tão difícil para as pessoas que entendem a afirmação anterior. Eu acho que pode ser corrigido com algumas regras de firewall no OpenWrt AP, mas eu tenho que pesquisar essa parte.

    
por 15.07.2013 / 17:04