3

Я хочу изолировать гостей, подключающихся к моему Wi-Fi, от подсети 10.0.0.x, одновременно предоставляя им доступ в Интернет. Маршрутизатор OpenWrt находится на 192.168.1.48 (интерфейс wifi имеет 10.0.0.1), а мой шлюз на 192.168.1.254. Как мне настроить OpenWrt, чтобы гости могли выходить в Интернет через мой шлюз, но оставались ограниченными 10. подсетью?

Я прочитал рецепт guest-wlan на вики OpenWrt, но я не могу понять, как делать то, что я хочу делать. До сих пор мне удалось настроить DHCP-сервер для гостей, который выдает адреса 10.x.

Я также заметил, что могу разрешать имена хостов с ноутбука в сети 10.x. Из журналов dnsmasq я могу видеть, что он знает, что на сервере 192.168.1.254 есть сервер имен (потому что он выглядит в /etc/resolv.conf, я полагаю). Но как и почему пакеты пересекают брандмауэр?

Я использую Backfire 10.03.1 на WRT54GL. Шлюзом является Linksys E4200. Это моя конфигурация OpenWrt на данный момент:

/ И т.д. / конфигурации / 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'

/ И т.д. / конфигурации / сети

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'

/ И т.д. / конфигурация / беспроводная

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 (не изменил его по умолчанию)

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

Я понимаю, что это больше общий сетевой вопрос, чем вопрос OpenWrt, но я подумал, что должен упомянуть OpenWrt. У меня есть малейшая идея, что для создания этой работы нужна чёрная магия iptables, но я не могу понять правильные заклинания, поэтому я хотел попросить о помощи.

Заранее спасибо!

1 ответ1

3

Была такая же ситуация, как у вас, за исключением шлюза (Cisco RV042G). Тем не менее, мое решение, вероятно, не будет работать на E4200 из-за отсутствия функций. Если это возможно с помощью других методов, то это за пределами моего знания. Я добавляю ответ для других, которые могут искать решение, подобное этому.

Предположим, что 10.0.0.0/24 - это ваша основная сеть с адресом шлюза 10.0.0.1, а 10.0.1.0/24 - гостевая сеть. Шаги для воспроизведения моего решения:

  • Создайте другую подсеть для гостей на шлюзе. Шлюз должен поддерживать эту функцию, поскольку он создает несколько таблиц NAT для маршрутизации интернет-трафика в соответствующую подсеть.
  • Добавьте правило брандмауэра для блокировки всего трафика от 10.0.1.0/24 до 10.0.0.0/24 на шлюзе.
  • Используйте сборку OpenWrt с ядром 2.6+. Сборки brcm-2.4 не из-за отсутствия поддержки ebtables. Я использовал сборку 12.06 с конфигурацией, основанной на конфигурации по умолчанию brcm47xx. С изображением по умолчанию opkg не работает, пока я не пробовал 10.03. Я рекомендую Debian 7 i386 для buildroot, так как он потратил достаточно часов моей жизни с amd64 и различными случайными ошибками компиляции. Вы можете использовать ImageBuilder, я думаю, но я не пробовал. Для ebtables вам понадобятся следующие пакеты: ebtables, ebtables-utils, kmod-ebtables-ipv4. Модуль ядра не добавляется автоматически как зависимость, поэтому будьте осторожны.
  • Эти правила ebtables ниже в /etc/firewall.user для блокировки широковещательной передачи DHCP от шлюза, если шлюз не поддерживает несколько пулов DHCP. RV042G нет. Нашел их на форумах OpenWrt, адаптировал их для 12.06, который использует eth0.0 в качестве имени интерфейса для локальной сети VLAN.

ebtables -F

ebtables -A INPUT - в интерфейсе eth0.0 - протокол ipv4 - протокол udp uip --ip-source-port 67:68 -j DROP

ebtables -A INPUT - в интерфейсе eth0.0 - протокол ipv4 - протокол udp uip --ip-destination-port 67:68 -j DROP

ebtables -A FORWARD - в интерфейсе eth0.0 - протокол ipv4 - протокол udp uip --ip-destination-port 67:68 -j DROP

ebtables -A FORWARD - в интерфейсе eth0.0 - протокол ipv4 - протокол udp uip --ip-source-port 67:68 -j DROP

  • Необязательно: Настройте интерфейс локальной сети для вторичной подсети. Вам необходимо изменить адрес, если и шлюз, и точка доступа OpenWrt используют значения по умолчанию (192.168.1.1).

интерфейс конфигурации локальной сети

вариант типа моста

опция ifname "eth0.0"

вариант прото статический

опция ipaddr 10.0.1.2

опция маска сети 255.255.255.0

опция шлюза 10.0.1.1

опция днс "8.8.8.8 8.8.4.4"

  • Сообщите DHCP-серверу, какой шлюз транслировать, поскольку он обычно использует ipaddr из конфигурации интерфейса lan:

config Dhcp LAN

опция интерфейса локальной сети

вариант запуска 100

предел опции 100

Вариант аренды 1 час

список 'dhcp_option' '3,10.0.1.1'

  • Настройте беспроводную сеть как обычную точку доступа. Необязательно: шифрование (рекомендуется), изоляция клиента (также рекомендуется).

Я обнаружил только одну проблему с этой настройкой: гость все еще может войти в вашу основную сеть, если подсеть для этой сети "угадана" и конфигурация сети выполняется вручную для беспроводного интерфейса. Учитывая тот факт, что гости все еще видят трансляции arp из основной сети, людям не так сложно понять предыдущее утверждение. Я думаю, что это можно исправить с помощью некоторых правил брандмауэра на AP OpenWrt, но я должен исследовать эту часть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .