Я пытаюсь настроить 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
чтобы подтвердить.
Спасибо!