Как использовать правила NAT iptables для hostapd


9

Мой компьютер оснащен двумя сетевыми интерфейсами wlan0& eth0, и я хочу использовать WiFi-порт в качестве точки доступа wlan0.

  • Я использовал hostapdсредство, и оно работает правильно в режиме маршрутизации в локальной сети; пользователи могут подключаться к точке доступа, и DHCP работает правильно в обоих сегментах.
  • ПК с hostapdне имеет никаких брандмауэров или iptablesправил ( iptablesи брандмауэры отключены), так как я хочу использовать только встроенный брандмауэр маршрутизатора ADSL.

Мой сетевой конфиг выглядит следующим образом:

  • PC with hostapd -> cable connection -> ADSL router
  • wlan0 -> eth0 <-> 192.168.0.1 <-> internet
  • 192.168.10.1 -> 192.168.0.7 -> static routing to 192.168.10.X

ПК ifconfig:

eth0  Link encap:Ethernet  HWaddr 00:12:3F:F2:31:65
      inet addr:192.168.0.7  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::212:3fff:fef2:3165/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2169539 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1008097 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3056198487 (2.8 GiB)  TX bytes:72727161 (69.3 MiB)
      Interrupt:16

lo    Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3398 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:495444 (483.8 KiB)  TX bytes:495444 (483.8 KiB)

mon.wlan0  Link encap:UNSPEC  HWaddr 00-14-A5-04-94-3C-90-F0-00-00-00-00-00-00-00-00
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:151 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:17092 (16.6 KiB)  TX bytes:0 (0.0 b)

wlan0 Link encap:Ethernet  HWaddr 00:14:A5:04:94:3C
      inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
      inet6 addr: fe80::214:a5ff:fe04:943c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 b)  TX bytes:279392 (272.8 KiB)

Как мне настроить простую iptablesконфигурацию NAT для этого на ПК?

  • Я хочу, чтобы все пользователи, подключенные к сети через hostapd(сеть 192.168.10.X), имели доступ к Интернету и из него.
  • Я не хочу фильтровать трафик, только только NAT.

Я не могу подключиться к Интернету из сегмента WiFi:

  • Клиент, подключенный к WiFi, имеет DHCP-адрес 192.168.10.48, и единственный трафик включен eth0с адреса:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Примечание: адреса 192.168.0.48нет 192.168.10.48, поэтому маскарад швов работает.
  • Я больше не могу пинговать 192.168.0.1[ADSL router], что было возможно раньше.
  • А как насчет доступа из Интернета для пользователей WIFI? Конечно, я настрою маршрутизатор ADSL, перенаправляя пулы определенных IP-портов из Интернета на определенный IP-адрес такого пользователя WiFi.

РЕДАКТИРОВАТЬ 1:

  • systemctlпоказывает iptablesкак:
    iptables.service          loaded active exited
    
    Хотя я побежал:
    systemctl enable iptables.service
    systemctl start iptables.service
    

РЕДАКТИРОВАТЬ 2:

  • Это работает, но каждый раз, когда я загружаю компьютер, нормально ли вручную добавлять следующее через скрипт запуска?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Смотрите мой обновленный ответ ниже ...
MLu

Ответы:


6

В простейшем виде:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Это позволит всем пользователям WiFi доступ к Интернету.

Конечно, предполагая, что ваша другая настройка маршрутизации уже выполнена, а именно:

  1. В ядре включена пересылка

    sysctl net.ipv4.ip_forward=1
    
  2. Переадресация включена в iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Используйте tcpdump -nn -i eth0для наблюдения за трафиком eth0в случае возникновения проблем, чтобы увидеть, правильно ли он настроен на NAT, возвращается ли ответ и т. Д.

РЕДАКТИРОВАТЬ: «Я должен добавить вручную каждый раз, когда я загружаю компьютер (из сценария запуска) ...» Это зависит от того, какой дистрибутив Linux у вас есть. К сожалению, почти в каждом дистрибутиве есть свой собственный инструмент брандмауэра - в конце концов, они только вызывают, iptablesно по какой-то причине авторы считают, что запутывание работы iptables - это то, что хотят пользователи.

Чтобы ответить на ваш вопрос - скорее всего ваш брандмауэр может быть настроен на автоматическое добавление этого правила NAT. Точный путь, однако, варьируется между дистрибутивами Linux без веской причины. Грустно, но правда.


Все брандмауэры на ПК отключены. Единственный запущенный сервис iptables
mackowiakp

iptables == firewall. Каким-то образом вам нужно настроить iptables для выдачи этого правила MASQUERADE. Как? Это зависит от вашего дистрибутива Linux. Где-то должен быть файл конфигурации. Куда? Это зависит от вашего дистрибутива Linux.
MLu

Таким образом, вы управляли mu iptables:
mackowiakp

Итак, у вас есть правила iptables: [root @ media ~] # iptables -L Цепочка INPUT (политика ACCEPT) целевой целевой источник назначения Цепь FORWARD (политика ACCEPT) целевой целевой источник источника назначения Цепочка OUTPUT (политика ACCEPT) целевой объект источника назначения , А у меня и такая строчка при запуске: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Таким образом, моя реализация iptables является де-факто «прозрачным» брандмауэром - или без брандмауэра
mackowiakp

5

Я написал брандмауэр на все случаи жизни. Пожалуйста, прочтите README и СЦЕНАРИЙ перед его использованием. Я включил необходимые правила для HOSTAP

Основные части:

HostAP

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

HostAP требует, чтобы строки ниже оба были ПРИНЯТЫ для функционирования

iptables -A INPUT -j ACCEPT >> /dev/null 2>&1 
iptables -A OUTPUT -j ACCEPT >> /dev/null 2>&1

https://github.com/diveyez/fw.sh

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.