Как мне перенаправить пакет для использования localhost в качестве шлюза? - PullRequest
3 голосов
/ 09 февраля 2011

Я пытаюсь протестировать шлюз, который я написал (см. Какой самый простой способ проверить шлюз? для контекста). Из-за проблемы, в которую я бы лучше не попал, шлюз и «отправитель» должны быть на одной машине. У меня есть приемник (скажем, 9.9.9.9), который шлюз может достичь.

Итак, я запусту приложение ./sendStuff 9.9.9.9, которое отправит несколько пакетов на этот IP-адрес.

Проблема заключается в следующем: как заставить пакеты, предназначенные для 9.9.9.9, перейти на шлюз на локальном хосте? Я пробовал:

sudo route add -host 9.9.9.9 gw 127.0.0.1 lo

sudo route add -host 9.9.9.9 gw <machine's external IP address> eth0

но ни один из этих пакетов не проходит через шлюз. Я проверил, что правильные IP-адреса присутствуют в sudo route. Что я могу сделать?


Для запроса, здесь приведена таблица маршрутов после выполнения второй команды (IP-адреса изменены в соответствии с вопросом. X.y.z.t - это IP-адрес компьютера, на котором я работаю):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
9.9.9.9         x.y.z.t         255.255.255.255 UGH   0      0        0 eth0
x.y.z.0         0.0.0.0         255.255.254.0   U     0      0        0 eth0
0.0.0.0         <gateway addr>  0.0.0.0         UG    100    0        0 eth0

1 Ответ

5 голосов
/ 09 февраля 2011

127.0.0.1, вероятно, собирает пакеты, затем пересылает их по-своему, если включена пересылка пакетов ipv4. Если он не включен, он их отбросит.

Если вы пытаетесь переслать пакеты, предназначенные для 9.9.9.9–127.0.0.1, изучите iptables.

Редактировать: попробуйте это:

iptables -t nat -A OUTPUT -d 9.9.9.9 -j DNAT --to-destination 127.0.0.1

Это должно перенаправить весь трафик на 9.9.9.9 вместо localhost.

...