Сделать, чтобы только локальный демон слушал на другом интерфейсе (используя переадресацию портов iptables)?

У меня есть программа-демон, которая слушает 127.0.0.1:8000.
Мне нужно получить доступ к нему, когда я подключаюсь к своей коробке с помощью VPN.
так что я хочу, чтобы он тоже слушал интерфейс ppp0.

я пробовал метод "ssh -L". это работает, но я не думаю, что это правильный путь, если в фоновом режиме выполняется дополнительный процесс ssh.
я попробовал метод "netcat". он выходит, когда соединение закрыто. так что недопустимый способ "прослушивания".

Я также попробовал несколько правил Iptables. никто из них не работал.
я не перечисляю здесь все правила, которые я использовал.

iptables -A FORWARD -j ACCEPT
iptables -t nat -A PREROUTING -i ppp+ -p tcp --dport 8000 -j DNAT --to-destination 127.0.0.1:8000

вышеуказанный набор правил не работает.
у меня net.ipv4.ip_forward установлен в 1.

кто-нибудь знает, как перенаправить трафик с интерфейса ppp на lo?
скажем, слушайте "192.168.45.1:8000 (ppp0)", а также "127.0.0.1:8000 (lo)"
нет необходимости менять порт.

Thanx

= - = обновить:

на роуминге, когда я использую

nc 192.168.45.1 8000

нет никакого вывода вообще независимо от того, что я печатаю.
однако при выполнении этого в сеансе SSH, для обоих

nc 127.0.0.1 8000
nc 192.168.45.1 8000

выдает сообщения об ошибках, если я ввожу какой-то случайный текст.
значит ли это, что мне нужны дополнительные правила для перенаправления вывода обратно в роуминг?

1 ответ

Я быстро взглянул на ваши правила iptables, и первая мысль, что они хорошо выглядят. Вы уверены, что это уже не работает - но только с иностранного хоста. Если вы попытаетесь подключиться к нему с самого сервера, он не будет работать. В этом случае вам также необходимо добавить правило nat в цепочку nat OUTPUT:

-t nat -A OUTPUT -p tcp -dst 192.168.45.1 --dport 8000 -j DNAT --to-destination 127.0.0.1:8000

(Это необходимо, потому что ваши локальные пакеты не будут проходить через цепочку PREROUTING - по крайней мере, в моей системе они не проходят.)

Я бы попробовал это сначала, но, возможно, есть дополнительная проблема. (Может быть, есть не только пакеты tcp, но и udp?)

Кстати, возможно, вы можете настроить своего демона для прослушивания обоих интерфейсов.

Другие вопросы по тегам