Перенаправление фильтра TC-проблема с поведением в одностороннем движении с ответами ICMP PingLinux

Ответить Пред. темаСлед. тема
Anonymous
 Перенаправление фильтра TC-проблема с поведением в одностороннем движении с ответами ICMP Ping

Сообщение Anonymous »

Я использую сценарий с хостом (192.168.222.1) и виртуальной машиной (192.168.222.130, интерфейс ENS33). На виртуальной машине у меня есть программа Python, которая создает интерфейс TUN (TUNX), и при получении пакета запроса ECHO ICMP, генерирует и отправляет обратно эхо -ответ через Tunx. < /P>
Программа обратно Код выглядит так: < /p>
import os
import fcntl
import struct
from pyroute2 import IPRoute

# Constants for TUN interface
TUNSETIFF = 0x400454ca
IFF_TUN = 0x0001
IFF_NO_PI = 0x1000

def create_tun_interface(name='tunX'):
# Open the TUN device file using os.open
tun_fd = os.open('/dev/net/tun', os.O_RDWR)

# Create the TUN interface
ifr = struct.pack('16sH', name.encode('utf-8'), IFF_TUN | IFF_NO_PI)
fcntl.ioctl(tun_fd, TUNSETIFF, ifr)

return tun_fd

def configure_interface(name='tunX', address='10.0.0.10/24'):
ip = IPRoute()
idx = ip.link_lookup(ifname=name)[0]
ip.addr('add', index=idx, address=address.split('/')[0], mask=int(address.split('/')[1]))
ip.link('set', index=idx, state='up')

def respond_to_ping(tun_fd):
while True:
# Read a packet from the TUN interface
packet = os.read(tun_fd, 2048)

# Check if it's an ICMP echo request (ping)
if packet[20] == 8: # ICMP type 8 is Echo Request
# Create an ICMP Echo Reply
response = packet[:20] + b'\x00' + packet[21:]

# Swap source and destination IP addresses
response = response[:12] + response[16:20] + response[12:16] + response[20:]

# Write the response packet back to the TUN interface
os.write(tun_fd, response)

def main():
tun_fd = create_tun_interface()
configure_interface()
try:
print("tunX interface created and configured. Listening for ICMP packets...")
respond_to_ping(tun_fd)
except KeyboardInterrupt:
print("Stopping...")
finally:
os.close(tun_fd)

if __name__ == '__main__':
main()
< /code>
На виртуальной машине я также настроил фильтр TC Ingress на ENS33, чтобы перенаправить пакеты ICMP, поступающие от хоста на Tunx: < /p>
sudo tc qdisc add dev ens33 handle ffff: ingress
sudo tc filter add dev ens33 parent ffff: protocol ip prio 1 flower ip_proto icmp src_ip 192.168.222.1 action mirred egress redirect dev tunX
< /code>
Мое ожидание состояло в том, что этот фильтр будет работать в обоих направлениях, то есть он обрабатывает Ping от хоста к виртуальной машине (запрос Echo) и Echo Reply от интерфейса TUN обратно к ENS33. Тем не менее, захваты пакетов показывают следующее: < /p>
На ENS33 наблюдаются только запросы ECHO ICMP: < /p>
19:16:46.496830 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1095, length 64
19:16:47.536950 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1096, length 64
19:16:48.576889 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1097, length 64
19:16:49.616997 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1098, length 64
19:16:50.667469 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1099, length 64
19:16:51.696889 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1100, length 64
19:16:52.737452 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1101, length 64
< /code>
В Tunx видны как Echo -запрос, так и Echo Reply (сгенерированный программой): < /p>
19:16:46.496845 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1095, length 64
19:16:46.497030 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1095, length 64
19:16:47.536964 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1096, length 64
19:16:47.537184 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1096, length 64
19:16:48.576902 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1097, length 64
19:16:48.578469 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1097, length 64
19:16:49.617014 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1098, length 64
19:16:49.617153 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1098, length 64
19:16:50.667486 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1099, length 64
19:16:50.667623 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1099, length 64
19:16:51.696902 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1100, length 64
19:16:51.697047 IP 192.168.222.130 > 192.168.222.1: ICMP echo reply, id 1003, seq 1100, length 64
19:16:52.737470 IP 192.168.222.1 > 192.168.222.130: ICMP echo request, id 1003, seq 1101, length 64
< /code>
Это означает, что, хотя запросы Echo правильно перенаправляются от ENS33 на Tunx, Echo ответы, направляемые из Tunx, не достигают ENS33. < /p>
Мои вопросы: < /p>
  • Правильно ли предположить, что фильтр TC должен работать
    Biderationally? < /Li>
    Что Может ли Echo ответы не перенаправляться на ENS33, и как я могу решить проблему?
Спасибо всем.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ng-replies
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»