Jak korzystać z reguł NAT iptables dla hostapd

9

Mój komputer jest wyposażony w dwa interfejsy netto, wlan0i eth0, i chcę użyć portu WiFi za pośrednictwem punktu dostępowego wlan0.

  • Użyłem hostapdobiektu i działa poprawnie w trybie routingu w sieci lokalnej; użytkownicy mogą połączyć się z punktem dostępu, a DHCP działa poprawnie w obu segmentach.
  • Na komputerze hostapdnie ma żadnych zapór ani iptablesreguł ( iptablesa zapory są wyłączone), ponieważ chcę korzystać tylko z wbudowanej zapory routera ADSL.

Moja konfiguracja sieci wygląda następująco:

  • 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

PC 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)

Jak skonfigurować prostą iptableskonfigurację NAT na komputerze PC?

  • Chcę, aby wszyscy użytkownicy podłączeni do sieci za pośrednictwem hostapd(sieci 192.168.10.X) mieli dostęp do iz Internetu
  • Nie chcę filtrować żadnego ruchu, tylko NAT.

Nie mogę uzyskać połączenia z Internetem z segmentu WiFi:

  • Klient podłączony do Wi-Fi ma adres DHCP 192.168.10.48, a jedyny ruch odbywa się eth0z adresu:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Uwaga: adres 192.168.0.48nie jest 192.168.10.48, więc Masquerade wydaje się działać.
  • Nie mogę już pingować 192.168.0.1[routera ADSL], co było wcześniej możliwe.
  • Co z dostępem z Internetu do użytkowników WIFI? Oczywiście skonfiguruję router ADSL, przekierowując konkretną pulę portów IP z Internetu na konkretny adres IP takiego użytkownika WiFi.

EDYCJA 1:

  • systemctlpokazuje iptablesjako:
    iptables.service          loaded active exited
    
    Mimo że pobiegłem:
    systemctl enable iptables.service
    systemctl start iptables.service
    

EDYCJA 2:

  • Działa, ale czy przy każdym uruchomieniu komputera normalne jest ręczne dodawanie następujących elementów za pomocą skryptu uruchamiania?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
mackowiakp
źródło
Zobacz moją zaktualizowaną odpowiedź poniżej ...
MLu,

Odpowiedzi:

6

W najprostszej formie:

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

Umożliwi to wszystkim użytkownikom WiFi dostęp do Internetu.

Oczywiście zakładając, że Twoja inna konfiguracja routingu jest już wykonana, a mianowicie:

  1. Przekazywanie włączone w jądrze

    sysctl net.ipv4.ip_forward=1
    
  2. Przekazywanie włączone w iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Służy tcpdump -nn -i eth0do obserwowania ruchu eth0w przypadku problemów, aby sprawdzić, czy jest poprawnie NATedowany, czy odpowiedź wraca itp.

EDYCJA: „Muszę dodawać ręcznie za każdym razem, gdy uruchamiam komputer (ze skryptu uruchamiania) ...” To zależy od posiadanej dystrybucji Linuksa. Niestety, prawie każda dystrybucja ma swoje własne narzędzie Firewall - w końcu tylko dzwonią, iptablesale z jakiegoś powodu autorzy uważają, że zaciemnianie sposobu działania iptables jest tym, czego chcą użytkownicy.

Aby odpowiedzieć na twoje pytanie - najprawdopodobniej twoja zapora ogniowa może zostać skonfigurowana do automatycznego dodawania tej reguły NAT. Dokładny sposób różni się jednak między dystrybucjami Linuksa bez uzasadnionego powodu. Smutne ale prawdziwe.

MLu
źródło
Wszystkie zapory na PC są wyłączone. Jedyną działającą usługą jest iptables
mackowiakp
iptables == firewall - Jakoś musisz skonfigurować iptables, aby emitował tę regułę MASQUERADE. W jaki sposób? To zależy od twojej dystrybucji linuksa. Gdzieś musi być plik konfiguracyjny. Gdzie? To zależy od twojej dystrybucji linuksa.
MLu
Więc masz mu iptables orzekł:
mackowiakp
Masz więc orzeczone mu iptables: [root @ media ~] # iptables -L Łańcuch INPUT (strategia ACCEPT) docelowy prot opt ​​docelowy łańcuch Łańcuch DO PRZODU (policy ACCEPT) docelowy prot opt ​​źródłowy łańcuch Łańcuch WYJŚCIE (policy ACCEPT) docelowy prot opt ​​źródłowy cel . I ja i taki wiersz podczas uruchamiania: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Więc moja realizacja iptables jest de facto „przezroczysty” Firewall - zapora lub bez
mackowiakp
5

Napisałem zaporę ogniową na każdą okazję. Przed użyciem przeczytaj README i SCRIPT. Podałem niezbędne zasady dla HOSTAP

Niezbędne części:

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 wymaga, aby oba poniższe wiersze były AKCEPTOWANE do działania

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

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

Ricky Neff
źródło