В системе linux я построил свой собственный протокол туннелирования, где я ретранслирую пакеты по нестандартизированной, но проверенной среде. То, что я делаю, это перехватывает пакеты, используя iptables и NFQUEUE, ретранслирует их через мою среду, а на другом конце я повторно внедряю их, используя необработанные сокеты. Пакет, поступающий в туннель, точно такой же, как и выходящий, проверенный.
Проблема в том, что это не работает для Ping ICMP (Echo Request), если назначение ping совпадает с конечной точкой туннеля.
Если пункт назначения не совпадает с конечной точкой туннеля, пакет ping перенаправляется и поступает, как и положено, к получателю, и ответ ping возвращается отправителю.
Кто-нибудь знает, что происходит? Разве нельзя отправить сырой icmp себе? Если нет, у кого-нибудь есть идея, что мне делать вместо этого?
Что у меня есть:
R1 ---- T1 ----- T2 ------ R2
R1 пинг R2.
R1, R2, маршрутизатор 1 и маршрутизатор 2
T1, T2, Туннельные Точки 1 и 2. (R1 и T1 расположены на одном маршрутизаторе, а R2 и T2 на одном маршрутизаторе).
Эта настройка не работает.
Это работает:
R1 ---- T1 ----- T2 ------ R2 ----- R3
R1, пинг R3, это работает.
Есть идеи?
/ Andy