переадресація iptables між двома інтерфейсами


26

Тож у мене є вікно Linux з двома бездротовими інтерфейсами, один - станція, а другий - AP.

wlan0 (станція) - Підключено до Інтернету

wlan1 (AP) - до нього підключаються інші клієнти.

Я хотів би, щоб клієнти, підключені до wlan1, мали змогу отримати доступ до Інтернету на wlan0. І я хотів би зробити це за допомогою iptables, оскільки у мого ядра немає мостової підтримки ...

Ось що я намагався поки що з iptables, але він не працює:

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

Буду вдячний за будь-яку допомогу.


1
IPTABLES є потужним пакетом-фільтром, він дозволяє / краплі / манґлі пакети. Це не маршрутизатор чи міст. Ваші команди налаштовують брандмауер, щоб дозволити трафік, але вони нічого не роблять, щоб насправді переслати його.
Зоредаче

Тому замініть ядро ​​на таке, яке має необхідні функції. Зрештою, це "вікно Linux".
Майкл Хемптон

Чи можу я досягти того, що намагаюся зробити з маршрутом? Я також розгляну, як відновити ядро ​​з підтримкою мосту, але цікаво, чи є інші варіанти.
похмурий

Маршрут повідомляє, куди йти, як тільки це ввімкнено. Майкл сказав вам, що потрібно зробити для підтримки маршрутизації. ТІЛЬКО вам потрібно увімкнути його через sysctl.
Магеллан

Відповіді:


35

По-перше, щоб хости, що підключаються до вашого приватного інтерфейсу, виходили до Інтернету, вам не потрібно з'єднання інтерфейсів, вам потрібно маршрутизувати пакети, що надходять на один інтерфейс, на інший, де вони виходять у дику природу.

Для цього вам потрібно лише:

  1. Увімкніть переадресацію на ваш Linux-скриньку:
  2. Дозвольте певним пакетам (або всім ним) пройти ваш маршрутизатор
  3. Як хтось заявив, оскільки netfilter - це брандмауер без громадянства, дозволяють здійснювати трафік для вже встановлених з'єднань
  4. Змініть адресу джерела на пакетах, що виходять в Інтернет

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABLISHED,RELATED \
             -j ACCEPT
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    

Це повинно це робити.


Я думаю, що ви, мабуть, маєте на увазі: echo 1 >/proc/sys/net/ipv4/ip_forwardдля першого рядка
Джейсон Тан,

це все ... не знаю, що сталося з останньою частиною цього рядка ... виправлено.
Торіан

Я думаю, вам також доведеться налаштувати клієнтів використовувати поле Linux як їх шлюз.
Джейсон Тан

І щоб переадресація зберігалася через перезавантаження, ви хочете зробити це: 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Джейсон Тан,

1
@StudentsTea Так, ви це зробите, якщо ваша iptables" FORWARDтаблиця не встановлена на глобальному рівні, приймаючу політику. Тим не менше, як і раніше, потрібні natправила таблиці.
Томас Уорд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.