Я попытался перенаправить eth0 на wlan0 на моем Raspberry Pi B+, используя NAT на iptables с помощью следующих команд:

echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A FORWARD --in-interface eth0 -j ACCEPT iptables --table nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE

Но это не сработало, когда я попытался ping google.com я получил ping: unknown host google.com на моем ноутбуке, который подключен к порту eth0 на моем Raspberry Pi B+. На моем Raspberry Pi B+ у меня просто нормальный доступ в интернет с wlan0. IP-адреса в моей сети wifi выглядят так: 192.168.1.xxx.

Как переслать eth0 в wlan0?

2 ответа2

0

iptables позволяет фильтровать трафик и настраивать трансляции NAT, как вы это сделали, но на самом деле он не имеет ничего общего с настройкой устройства в качестве маршрутизатора для пересылки трафика между двумя интерфейсами.  Единственная команда, которая на самом деле делает что-либо, это относится к команде ip_forward.  Все остальное зависит от вашей настройки IP на Pi и на вашем ноутбуке. 

(для пояснения, ваша вторая строка говорит iptables разрешить трафик, поступающий по eth0 и перенаправленный куда-либо, кроме самого Pi, но на самом деле он не позволяет трафику проходить в другую сторону, поэтому он сам по себе бесполезен, и это актуально, только если вы настроил iptables по умолчанию отбрасывать весь трафик FORWARD)

Так что, если у самого Pi есть доступ к Интернету, вам необходимо ответить на следующие вопросы:

  • Какова настройка IP на стороне eth0 вашей сети, все ли выстроено в линию, чтобы ваш ноутбук мог нормально общаться с Pi, и использует ли ваш ноутбук адрес eth0 Pi в качестве шлюза?

  • Если вы достаточно изменили iptables, чтобы по умолчанию запретить весь трафик FORWARD, и действуют только вышеприведенные правила, вы действуете выше, гарантируя, что пакеты могут выходить, но ответ не может быть получен, так что же вы хотите, чтобы iptables фильтровал?

0

По крайней мере, показанные команды выглядят правильно. Если это не полная конфигурация брандмауэра, которую вы используете в Raspberry Pi, т.е. если у вас есть другие правила или вы изменили политику переадресации по умолчанию (по умолчанию это ПРИНЯТЬ, изменено с помощью iptables -P), вам, вероятно, также необходимо включить ответить на трафик, добавив соответствие состояния:

iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Это позволит трекеру соединения обнаруживать ответные пакеты как принадлежащие тому же соединению, исходящему из внутреннего интерфейса, и принимать их.

Я не могу точно вспомнить, если ядро Raspberry Pi не включило сопоставление контратак, вместо этого вы должны использовать (старое, устаревшее) расширение состояния:

iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Вы должны ввести только один из них. Я предпочитаю добавить это как первое правило в цепочке.

Интерфейс eth0 на Raspberry Pi и ваш компьютер за ним должны иметь адреса из другой сети. Например, вы можете использовать 192.168.10.1/24 (или /255.255.255.0, что тоже самое) на RasPi и 192.168.10.2 на целевом хосте.

На целевом хосте вы устанавливаете адрес eth0 RasPi (192.168.10.1 в предыдущем примере) в качестве шлюза по умолчанию, а DNS-серверы - так же, как установлено на вашем RasPi. Вы можете проверить, какие серверы использует RasPi, выполнив на нем команду: cat /etc/resolv.conf и посмотреть записи 'nameserver'. Или вы можете просто настроить общедоступный DNS Google (8.8.8.8, 8.8.4.4).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .