Я хочу создать шлюз на Linux, который имеет 2 интерфейса eth0 и eth1.
Eth1 создается lte модемом и после того как lte модем присоединяет к сети и получает IP-адрес. Затем dhcp сервер выполняется на шлюзе для обеспечения этого IP-адреса (пример: 10.20.30.6) к ПК, подключенному к eth0 локальной сети. затем eth0 присвоен с IP-адресом 10.20.30.1
Теперь самому eth1 не присваивают никакой IP-адрес.
Теперь я хотел бы передать все пакеты, полученные от ПК на eth0 интерфейса LAN к eth1 интерфейсу глобальной сети.
Любезно предложите меня IP правила таблиц, которые я должен использовать для создания этой передачи.
Любезно отметьте из-за ограничения lte модема, режим моста не может использоваться и не из-за ограничения архитектуры, которая будет создана, режим NAT также не может использоваться.
Куда вы собираетесь, вам не нужны iptables.
Насколько я понимаю, вы хотите иметь шлюз пересылает IP-пакеты между двумя интерфейсами, при этом шлюз не выполняет NAT для пересылаемых пакетов. Вы можете сделать это без каких-либо правил iptables.
Мне не хватает знаний о LTE. Так что, если возникнут какие-либо оговорки, касающиеся LTE, я не смогу вам с ними помочь. В моем ответе по большей части предполагается, что eth0
и eth1
работают с обычным IPv4 через Ethernet.
Прежде всего вам необходимо убедиться, что пересылка включена:
echo 1 >/proc/sys/net/ipv4/ip_forward
Пакеты прибывают из Интернета поступит на eth1
. Но отправителю этих пакетов может потребоваться выполнить запросы ARP для 10.20.30.6
, который не назначен вашему шлюзу. Таким образом, ваш шлюз не будет отвечать на эти запросы ARP, если вы не включите проксирование ARP:
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
После отправки ответа ARP остальная часть обработки входящих пакетов происходит с использованием обычной пересылки IP-пакетов, никакой магии не требуется.
Пакеты от ПК к шлюзу не требуют каких-либо уловок, чтобы прибыть на шлюз через eth0
. Сложная часть состоит в том, как заставить их уйти через интерфейс eth1
.
Вам нужен маршрут по умолчанию
. Но шлюзом для этого маршрута, вероятно, будет 10.20.30.1
, который вы только что назначили для eth0
на настраиваемом вами шлюзе. Однако, если вы знаете MAC-адрес исходного шлюза, вы можете заставить его работать, не требуя реального IP-адреса шлюза.
Сначала вы придумываете IP-адрес шлюза-заполнителя (должен быть адрес RFC 1918, которого у вас нет. нужно общаться иначе). В качестве примера я предполагаю 10.1.2.3
:
ip neigh add 10.1.2.3 lladdr xx:xx:xx:xx:xx:xx dev eth1
ip route add 10.1.2.3 dev eth1
ip route add default via 10.1.2.3
Поскольку 10.1.2.3 создается как постоянная запись в кэше ARP на вашем шлюзе, запросы ARP не будут отправляться для этого адреса. Это означает, что не будет проблемой, что следующий шлюз не узнает ваш выбранный IP-адрес-заполнитель.