Я пытаюсь провести тест, в котором я пересылаю ответы ICMP на интерфейс TAP. Я создал интерфейс TAP и назначил ему адрес 10.0.4.1/24
.
Моя установка linux использует интерфейс enp0s3
как вариант по умолчанию. Чтобы переслать любой ответ ICMP на интерфейс TAP, я попробовал следующие правила:
# iptables -t nat -A PREROUTING -i enp0s3 -p icmp -j DNAT --to 10.0.4.1
# iptables -A FORWARD -p icmp -i enp0s3 -j ACCEPT
# iptables -t nat -A POSTROUTING -o 10.0.4.1 -j MASQUERADE
На данный момент интерфейс TAP находится в состоянии UP, и у меня есть программа который слушает интерфейс TAP.
Если я пингую внешний IP-адрес, например 8.8.8.8, ping
программа все еще может получить ответ. Я хочу спросить, не следует ли ping
программа не получает ответа, потому что ответ ICMP перенаправляется на интерфейс TAP? Кроме того, правильный ли мой подход к перенаправлению трафика на устройство TAP?
IP-адрес, назначенный интерфейсу TAP, принадлежит хосту, поэтому это локальный IP-адрес. Пример:
# ip -4 address show tap0
20: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
inet 10.0.4.1/24 scope global tap0
valid_lft forever preferred_lft forever
# ip route get 10.0.4.1
local 10.0.4.1 dev lo src 10.0.4.1 uid 0
cache <local>
Важен только маршрут к TAP-интерфейсу. То есть из-за неявного маршрута, добавленного при запуске интерфейса, любой IP-адрес в 10.0.4.0/24 Кроме 10.0.4.1.
# ip route get 10.0.4.2
10.0.4.2 dev tap0 src 10.0.4.1 uid 0
cache
Поэтому, если вы хотите, чтобы ваша программа действительно видела какой-либо трафик, попробуйте заменить в своих правилах 10.0.4.1, например, 10.0.4.2. Реальный ответ с этого IP-адреса, если это цель, зависит от прилагаемой программы (и при использовании tap, а не tun, ответ также и на ARP).
Прочие примечания:
-d
скорее, чем -o
. Вы можете вообще выбрать МАСКЕРАДИРОВАНИЕ источника, нет необходимости направлять пакет в программу и получать (правильный) ответ, отправленный обратно исходному источнику.Дополнительная ссылка: https://backreference.org/2010/03/26/tuntap-interface-tutorial/