Як використовувати правила iptables NAT для 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:

  • Клієнт, підключений до Wi-Fi, має 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], що було можливо раніше.
  • А як щодо доступу з Інтернету до користувачів WIFI? Звичайно, я налаштуюся в маршрутизатор ADSL, пересилаючи конкретний пул IP-портів з Інтернету на певну IP-адресу такого користувача WiFi.

EDIT 1:

  • systemctlпоказує iptablesяк:
    iptables.service          loaded active exited
    
    Незважаючи на те, що я бігав:
    systemctl enable iptables.service
    systemctl start iptables.service
    

EDIT 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у разі виникнення проблем, щоб побачити, чи він належним чином NATED, чи відповідь повертається тощо.

EDIT: "Мені доводиться додавати вручну щоразу, коли я завантажую комп'ютер (із сценарію запуску) ..." Це залежить від того, який у вас дистрибутив Linux. На жаль, майже кожен дистрибутив має власний інструмент брандмауера - врешті-решт, вони лише дзвонять, iptablesале чомусь автори вважають, що користувачі обтяжують те, як працюють iptables.

Щоб відповісти на ваше запитання - найімовірніше, ваш брандмауер може бути налаштований автоматично додавати це правило NAT. Однак точний шлях змінюється між дистрибутивами Linux без поважних причин. Сумно але правда.


Усі брандмауери на ПК відключені. Єдиний сервіс, що працює, - iptables
mackowiakp

iptables == брандмауер - якось потрібно налаштувати iptables, щоб випромінювати це правило MASQUERADE. Як? Це залежить від вашого дистрибутива linux. Десь має бути конфігураційний файл. Де? Це залежить від вашого дистрибутива linux.
MLu

Отож, у вас є рішення
i

Таким чином, у вас є рішення iptables: [root @ media ~] # iptables -L Chain INPUT (policy ACCEPT) target prot opt ​​source source location Chain FORWARD (policy ACCEPT) target prot opt ​​source source location Chain OUTPUT (policy ACCEPT) target prot opt ​​source source location . І я, і такий рядок при запуску: iptables -t nat -A РОЗМІСТАННЯ -o eth0 -j MASQUERADE. Тож моя реалізація iptables - це фактично "прозорий" брандмауер - або без брандмауера
mackowiakp

5

Я писав брандмауер на всі випадки життя. Будь ласка, прочитайте README та SCRIPT перед його використанням. Я включив необхідні правила для 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 вимагає, щоб рядки внизу були прийнятими, щоб функціонувати ACCEPT

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.