пересылка 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
    

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


Я думаю, что вы, вероятно, имеете в виду: 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.