Пересылаемые пакеты видны tcpdump, но не принимаются приложением
У меня 3 машины:
- A 10.8.0.8/24
- B 10.8.0.13/24 10.248.0.34/23
- C 10.8.0.40/24 10.248.0.12/23
На AI добавьте маршрут от A до C, используя: ip route add 10.248.0.12 via 10.8.0.13
,
Затем я проверяю конфигурацию. По типу CI nc -ul 2002
, Тогда на AI используйте nc -u 10.248.0.12 2002
отправить несколько пакетов.
Пакеты не получены nc
на C.
Однако, когда я использую на Ctcpdump -n "(src host 10.8.0.8 and dst host 10.248.0.12) or (src host 10.248.0.12 and dst host 10.8.0.8)" -vv -i any
тогда это читает15:19:46.756649 IP (tos 0x0, ttl 63, id 47699, offset 0, flags [DF], proto UDP (17), length 29) 10.8.0.8.44254 > 10.248.0.12.2002: [udp sum ok] UDP, length 1
,
Что я могу сделать, чтобы проверить, что происходит с пакетами, ясно, что пакеты маршрутизируются от A до C, но по какой-то причине они отклоняются.
На C:
iptables -t filter -L FORWARD -n
Chain FORWARD (policy ACCEPT)
target prot opt source destination
WEAVE-NPC all -- 0.0.0.0/0 0.0.0.0/0 /* NOTE: this must go before '-j KUBE-FORWARD' */
NFLOG all -- 0.0.0.0/0 0.0.0.0/0 state NEW nflog-group 86
DROP all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
KUBE-FORWARD all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes forwarding rules */
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 /* generated for LXD network fanbr0 */
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 /* generated for LXD network fanbr0 */
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
iptables -t mangle -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
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
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
CHECKSUM udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 /* generated for LXD network fanbr0 */ CHECKSUM fill
2 ответа
Как указывает @AB, объяснение - фильтрация обратного пути. Я сделал 10.248.0.12 доступным из A, отключив фильтрацию rp на C.
sysctl -w net.ipv4.conf.all.rp_filter=0
echo 0 > /proc/sys/net/ipv4/conf/*/rp_filter
Я вижу правило
DROP all - 0.0.0.0/0 0.0.0.0/0
перед правилами
ПРИНЯТЬ все - 0.0.0.0/0 0.0.0.0/0
ПРИНЯТЬ все - 0.0.0.0/0 0.0.0.0/0
Таким образом, все перенаправленные пакеты на C будут отброшены.