Как переслать трафик localhost на удаленный хост с помощью iptables?

Я хотел бы настроить свою коробку CentOS 6.5 для переадресации соединений на локальный хост (127.0.0.1) на тот же порт на удаленной машине (например, 10.0.3.10).

Я пробовал правило iptables ниже, но когда я пытаюсь подключиться, оно просто зависает:

iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 8888 \
    -j DNAT --to-destination=10.0.3.10:8888

Бег tcpdump на удаленной машине я вижу, что входящего трафика не было. Я сделал несколько поисков в Google, но не нашел ничего особенно полезного. Я также подтвердил, что мой sysctl.conf файл содержит net.ipv4.ip_forward = 1,

Изменить Я добавил запись в ответ на один из комментариев ниже. Он не выдает выходной сигнал, когда я перехожу к 127.0.0.1:8888, но выдает выходной сигнал при переходе к 10.0.3.10:

# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [11:1008]
:OUTPUT ACCEPT [11:1008]
:LOGGING - [0:0]
-A OUTPUT -p tcp -m tcp -d 10.0.3.10 --dport 8888 -j LOGGING
-A LOGGING -j LOG --log-prefix "IPTABLES: "
-A LOGGING -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 8888 -j DNAT --to-destination 10.0.3.10:8
888
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*filter
:INPUT ACCEPT [50:2776]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:4336]
COMMIT
# Completed on Tue Jul 29 12:52:17 2014

2 ответа

Решение

Я не знаю, как настроить iptables на этой машине, чтобы делать так, как вы хотите. Я обычно использую в таком случае SSH туннелирование. Я нахожу это простым в настройке (личное мнение здесь!);-) но... вам нужно иметь SSH-соединение на вашем локальном хосте (оно не должно быть доступно удаленно!).

Синтаксис команды в этом случае:

ssh -f -C -N -L [<bind address>:]<local port>:<remote host name>:<remote service port> [-p <ssh port>] [<username>@]<remote host outside name>

Так что для вас это будет означать:

ssh -f -C -N -L 127.0.0.1:8888:10.0.3.10:8888 localhost

Хитрость заключается в том, чтобы включить обработку маршрута localhost/localnet для вашего исходящего интерфейса с помощью:

sysctl -w net.ipv4.conf.all.route_localnet=1

Тогда это работает:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.10
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
Другие вопросы по тегам