Назад | Перейти на главную страницу

NFTables Masquerade не работает

Я пытаюсь настроить NFTables для перенаправления трафика, поступающего через определенный порт UDP, на другой сервер с другим IP-адресом. Однако, похоже, мое правило маскарада не работает. Когда я отправляю пакеты на этот конкретный порт UDP, он пытается перенаправить трафик, но не меняет исходный IP-адрес на IP-адрес сервера пересылки. Насколько я понимаю, это должно происходить по правилу маскарада. Хотя даже правило SNAT не работало.

Вот вывод TCPDump, показывающий, в чем проблема:

01:04:12.437619 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9
01:04:12.437657 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <DestIP>.27015: UDP, length 9
01:04:14.145003 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9
01:04:14.145051 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <DestIP>.27015: UDP, length 9

Я хочу, чтобы это выглядело так:

01:04:12.437619 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9
01:04:12.437657 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <ForwardIP>.7130 > <DestIP>.27015: UDP, length 9
01:04:14.145003 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9
01:04:14.145051 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <ForwardIP>.7130 > <DestIP>.27015: UDP, length 9

Вот как настроен мой текущий NFTables:

root@forwardtest:~# nft list tables
table ip compressor_forward

root@forwardtest:~# nft list table compressor_forward -a
table ip compressor_forward { # handle 1
        chain prerouting { # handle 15
                type nat hook prerouting priority dstnat; policy accept;
                udp dport 27015 dnat to 149.28.45.245 # handle 17
        }

        chain postrouting { # handle 16
                type nat hook postrouting priority srcnat; policy accept;
                masquerade random # handle 18
        }
}

Я пробовал удалить random Флаг NAT вместе с добавлением persistent Флаг NAT. Мне нужен random Флаг NAT для моего случая. Однако добавление / удаление флагов не имело никакого значения.

Также установлена ​​переадресация IPv4:

root@forwardtest:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

IPTables (NAT) также следует удалить. Вот несколько команд, которые я выполнил:

root@forwardtest:~# rmmod iptable_nat
rmmod: ERROR: Module iptable_nat is not currently loaded

root@forwardtest:~# lsmod | grep "iptable"

root@forwardtest:~# lsmod | grep "nft"
nft_masq               16384  1
nft_nat                16384  1
nft_chain_nat          16384  2
nf_nat                 40960  3 nft_nat,nft_masq,nft_chain_nat
nf_conntrack          139264  3 nf_nat,nft_nat,nft_masq
nf_tables             135168  8 nft_nat,nft_masq,nft_chain_nat

root@forwardtest:~# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

root@forwardtest:~# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Пожалуйста помни lsmod | grep "iptable" ничего не вернул. Я также пробовал создать postrouting цепочка с приоритетом 1, но это не имело значения.

Сервер пересылки работает Ubuntu 20.04 LTS на ядре 5.4.0-26-generic.

Что мне в этом случае не хватает? С учетом сказанного, я новичок в NFTables. Поэтому прошу прощения, если я упускаю что-то очевидное.

Если вам нужна дополнительная информация, дайте мне знать!

Любая помощь высоко ценится!

Спасибо за уделенное время.

Я решил эту проблему. Я обновил ядро ​​сервера пересылки с 5.4.0-26-generic к 5.6.11-050611-generic и он начал работать правильно. С учетом сказанного, я попытался перезапустить сервер пересылки на старом ядре, и проблема не исчезла после перезапуска. Поэтому я действительно считаю, что проблема в ядре.

Определенно странный вопрос. Скоро я установлю еще один тестовый сервер, работающий на 5.4.0-26-generic чтобы подтвердить.

Спасибо!