Я хочу использовать PI с последней версией Raspbian в качестве сетевого моста - не знаю, правильный ли это термин, но цель легко объяснить:
PI не использует DHCP; его eth0 настроен на использование статического IP 192.168.0.1 с маской адреса 255.255.255.0, а маршрутизатор настроен на использование IP 192.168.0.2, той же маски адреса и 192.168.0.1 в качестве шлюза.
В тестах я вижу, что помимо того, что сам PI находится в сети:
так что с сетью все выглядит нормально, но нет доступа в Интернет с устройств LAN, предположительно из-за того, что правила пересылки пакетов отсутствуют / неправильны. Каковы правила пересылки всех пакетов, поступающих на eth0 с IP 192.168.0.2 на динамический IP на usb0 + ответная часть для "пакетов ответа" на обратном пути? Последний в сочетании с правилом, блокирующим все входящие запросы?
Спасибо!
Благодаря ответу @BillThor и этому руководство Я смог встать на путь. Важно не путать аспекты маршрутизации и межсетевого экрана. Маршрутизация не требует специальных правил пересылки, если IP-маскарад включен, это «включено». Команды для включения маскарада IP:
$> sudo sysctl -w net.ipv4.ip_forward=1
для включения переадресации IP в ядре и
$> sudo iptables -t nat -A POSTROUTING -o <wan_network_interface> -j MASQUERADE
с участием <wan_network_interface>
сетевой интерфейс, обеспечивающий подключение к Интернету, usb0
в моем случае. Это будет работать, пока политика брандмауэра по умолчанию для FORWARD - ACCEPT (и никакое другое правило не запрещает это явно), например. если iptables -S
возвращается
OUTPUT DROP
FORWARD ACCEPT
INPUT DROP
Если политика по умолчанию для FORWARD изменена на DROP, следующие правила разрешают совместное использование подключения к Интернету:
$> sudo iptables -A FORWARD -i <shareconn_nw_intf> -o <online_nw_intf> -j ACCEPT
$> sudo iptables -A FORWARD -i <online_nw_interface> -o <shareconn_nw_interface> -j ACCEPT
Я все еще сомневаюсь, что произойдет, если пакет прибудет на <online_nw_interface>
в порту, который был не открыта маскировка IP? Будет ли это считаться INPUT или будет применяться последнее правило FORWARD выше? Я имею в виду, что эти правила FORWARD, похоже, настраивают брандмауэр для принятия решений о пересылке, которые были приняты в другом месте (маскарад), но на самом деле они не инструктируют iptables пересылать что-либо - верно ?? Я нахожу это довольно нелогичным ... но если я удалю правило маскарада, сохраняя правила пересылки, соединение с Интернетом не будет.
Вы можете включить маскировку, чтобы весь исходящий трафик выглядел так, как будто он исходит от Pi. Отправной точкой будут эти правила.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i eth0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Вы захотите установить соответствующие политики для цепочек. Возможно, с дополнительными правилами для DROP неожиданных пакетов на интерфейсе WAN и REJECT пакетов на интерфейсе eth0.
Если у вас есть IPv6, это не требует преобразования сетевых адресов, но имеет отдельную реализацию ip6tables. Есть отдельный shorewall6
пакет, чтобы настроить это.
Возможно, будет проще настроить с помощью такого инструмента, как shorewall
который должен быть доступен для pi
. В Shorewall на сайте есть много документации, которую можно использовать для создания собственных правил или просто shorewall
инструмент.