Я настраиваю TPROXY на своем маршрутизаторе VyOS для перенаправления определенного трафика на локальный прозрачный прокси. Это работает довольно хорошо, пока я не обнаружил, что все мои правила переадресации портов DNAT больше не работают (тайм-аут соединения при подключении из внешней сети).
Среда
- Маршрутизатор:
10.0.0.1/24
(прокси работает 1234
порт и добавление SO_MARK с 0xff
)
- Внутренний хост:
10.0.0.2/24
(Порт 80
надо выставить на всеобщее обозрение)
Правила TPROXY
ip правило добавить fwmark 1 таблица 100
ip route add local 0.0.0.0/0 dev lo таблица 100
nft добавить таблицу myproxy
nft add chain myproxy prerouting { type filter hook prerouting priority 0 \; }
nft добавить правило myproxy prerouting ip saddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } вернуть
nft добавить правило myproxy prerouting meta l4proto tcp ip saddr 10.0.0.0/24 return
nft добавить правило myproxy prerouting mark 0xff return
nft добавить правило myproxy prerouting meta l4proto {tcp, udp} пометить установить 1 tproxy на 127.0.0.1:1234 accept
nft добавить цепочку myproxy output { type route hook output priority 0 \; }
nft добавить правило myproxy output ipdddr {127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32} вернуть
nft добавить правило myproxy output meta l4proto tcp ip saddr 10.0.0.0/24 return
nft добавить правило myproxy output mark 0xff return
nft добавить правило myproxy output meta l4proto {tcp, udp} mark set 1 accept
nft добавить фильтр таблицы
nft add chain filter divert { type filter hook prerouting priority -150 \; }
nft добавить правило фильтр переадресовать мета l4proto tcp socket прозрачный 1 набор метаметок 1 принять
Правила ДНАТ
$ nft список таблиц nat
IP-адрес таблицы {
цепь PREROUTING {
type nat hook prerouting priority dstnat; политика принять;
iifname "pppoe0" tcp dport { 8080 } счетчик пакетов 7 байт 400 dnat to 10.0.0.2:80
}
}
Симптомы
Подключение Общедоступный IP-адрес маршрутизатора: 8080
тайм-аут. В идеале он должен перенаправлять трафик на 10.0.0.2:80
.
Я предполагаю, что входящий трафик DNAT ошибочно перенаправляется на прокси-сервер (вместо фактического хоста). 10.0.0.2
), однако я не смог определить правильные правила nft.
Заранее спасибо!