Я настроил динамическую службу ppp на Linux-машине, где клиенты будут подключаться и получать частный IP-адрес.
Правила, которые я установил в iptables в настоящее время:
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_dynaddr=1
iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
iptables -A ВВОД -i ppp+ -j ПРИНЯТЬ
iptables -A ВПЕРЕД -i ppp+ -j ПРИНЯТЬ
iptables -I PREROUTING -t nat -i ppp+ -p udp -s 10.0.10.3 -j DNAT --to 10.0.10.2
iptables -I PREROUTING -t nat -i ppp+ -p udp -s 10.0.10.2 -j DNAT --to 10.0.10.3
Моя предполагаемая функциональность заключается в том, чтобы любой, кто подключается к интерфейсу ppp, наследовал IP-адрес хоста и имел доступ к Интернету, а также мог общаться с одноранговыми узлами в той же сети. Успех!
За исключением широковещательных пакетов. Все, что отправляется на 255.255.255.255 или тому подобное, никому не доходит. Чтобы смягчить ситуацию, я жестко запрограммировал правила в жирный выше, однако это не динамическое решение, которое суммируется в зависимости от количества подключенных клиентов.
Мой вопрос в том, что я могу сделать, чтобы иметь решение iptables с подстановочными знаками для этого? В частности, в идеале мне нужно однолинейное решение, которое будет пересылать любой пакет udp с интерфейсов ppp на другие интерфейсы ppp, не мешая при этом другим правилам или пакетам tcp.
Заранее спасибо.
Редактировать
Я сдался и попытался жестко запрограммировать правила для 100 IP-адресов, чтобы, по крайней мере, заставить его работать нормально.Даже в самом коротком формате, который я смог найти, я столкнулся с проблемой, что только первый правило вступит в силу для данного пакета, а это означает, что я не могу создать несколько правил для одного и того же пакета и не могу создать универсальное правило для одного IP-адреса для всей сети, потому что он отправит рассматриваемый пакет источнику как ну, что приводит к аналогичному сбою:
Скриншот правил
Редактировать 2
Я отказался, так как ни одно из найденных мной решений для iptables, к сожалению, не является масштабируемым или применимым в моем сценарии. Я оставлю этот вопрос открытым на тот случай, если у кого-нибудь есть способ добиться этого в одной или нескольких строках в iptables или иным образом.
А пока, пожалуйста, не стесняйтесь просматривать следующие документы, относящиеся к моему конкретному делу, если вам интересно или если вы находитесь в том же сегменте:
Пересылка широковещательных пакетов Cisco
Ретрансляция UDP-трансляций
Учебник по NAT
Документация по диапазону IP-адресов DNAT
Наконец, вот обходной путь, который я сейчас реализовал:
https://github.com/udp-redux/udp-broadcast-relay-redux