пересылка iptables между двумя интерфейсами

26

Итак, у меня есть linux box с двумя беспроводными интерфейсами, один - станция, а другой - точка доступа.

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 box:
  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
    

Это должно сделать это.

Torian
источник
Я думаю, что вы, вероятно, имеете в виду: echo 1 >/proc/sys/net/ipv4/ip_forwardдля первой строки
Джейсон Тан
вот и все ... не знаю, что случилось с последней частью этой строки ... исправлено.
Ториан
Я думаю, что вам также нужно настроить клиенты на использование Linux-бокса в качестве шлюза.
Джейсон Тан
И чтобы пересылка продолжалась через перезагрузки, вы должны сделать это: 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Джейсон Тан,
1
@StudentsTea Да, вы это сделаете, если ваша iptables" FORWARDтаблица не установлена на глобальном уровне, принимающую политику. Вам все равно понадобятся natправила таблицы в любом случае.
Томас Уорд