iptables przekazywanie między dwoma interfejsami

26

Mam więc system Linux z dwoma interfejsami bezprzewodowymi, jeden to stacja, a drugi AP.

wlan0 (stacja) - Połączony z połączeniem internetowym

wlan1 (AP) - Łączą się z nim inni klienci.

Chciałbym, aby klienci podłączeni do wlan1 mieli dostęp do Internetu na wlan0. I chciałbym to zrobić z iptables, ponieważ moje jądro nie obsługuje mostkowania ...

Oto, co próbowałem do tej pory z iptables, ale to nie działa:

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

Byłbym wdzięczny za wszelką pomoc.

zamyślony
źródło
1
IPTABLES to stanowy filtr pakietów, który pozwala / upuszcza / zmienia pakiety. To nie jest router ani most. Twoje polecenia dostosowują zaporę ogniową, aby zezwalać na ruch, ale nie robią nic, aby faktycznie ją przekazać.
Zoredache,
Więc zamień jądro na takie, które ma potrzebne funkcje. W końcu jest to „pole linuksowe”.
Michael Hampton
Czy mogę osiągnąć to, co próbuję zrobić z „trasą”? Zajmę się także odbudową jądra z obsługą mostu, ale zastanawiam się, czy są inne opcje.
broody
Trasa informuje, gdzie jechać, gdy jest włączona. Michael powiedział ci, co musisz zrobić, aby wesprzeć routing. Następnie musisz włączyć go za pomocą sysctl.
Magellan,

Odpowiedzi:

35

Po pierwsze, aby umożliwić hostom łączącym się z twoim prywatnym interfejsem wychodzenie do Internetu, nie musisz mostkować interfejsów, musisz przekierowywać pakiety przychodzące z jednego interfejsu do drugiego, gdzie wychodzą na wolność.

Aby to zrobić, wystarczy:

  1. Włącz przekazywanie na swoim Linux-ie:
  2. Zezwól określonym pakietom (lub wszystkim z nich) na przechodzenie przez router
  3. Jak ktoś powiedział, ponieważ netfilter jest bezstanową zaporą ogniową, zezwól na ruch dla już ustanowionych połączeń
  4. Zmień adres źródłowy pakietów wychodzących do Internetu
    echo 1> / proc / sys / net / ipv4 / ip_forward
    iptables -A DO PRZODU -i wlan1 -o wlan0 -j AKCEPTUJĘ
    iptables -A DO PRZODU -i wlan0 -o wlan1 -m stan - stan USTANOWIONO, POWIĄZANE \
             -j AKCEPTUJĘ
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Że należy to zrobić.

Torian
źródło
Myślę, że prawdopodobnie masz na myśli: echo 1 >/proc/sys/net/ipv4/ip_forwarddla pierwszego wiersza
Jason Tan
to jest to ... nie wiem, co się stało z ostatnią częścią tej linii ... poprawione.
Torian
Myślę, że musiałbyś również ustawić klientów, aby używali Linuksa jako bramy.
Jason Tan,
Aby utrzymać przekazywanie przez ponowne uruchomienie, musisz to zrobić: „echo” net.ipv4.ip_forward = 1 ”>> /etc/sysctl.conf”
Jason Tan,
1
@StudentsTea Tak, ty, chyba że iptables" FORWARDstół jest ustawiony na przejmującego globalnie polityki. Mimo to nadal będziesz potrzebował natreguł tabeli.
Thomas Ward,