Назад | Перейти на главную страницу

ubuntu направляет трафик на определенный удаленный порт через другой хост

Есть три сервера: A, B и C.

C предоставляет службу на порту 8080, а правило брандмауэра разрешает соединения только от B.

Мне нужно настроить A и B, чтобы A также мог получить доступ к C через B.

Пожалуйста, обратите внимание:

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

Это конфигурация, которую я пробовал до сих пор.

На сервере A:

iptables -t nat -A OUTPUT -p tcp --dport 8080 -j DNAT --to-destination IP_OF_B:8080

На сервере B:

modprobe iptable_nat

vi /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p

iptables -t nat -A POSTROUTING -p tcp -s IP_OF_A --dport 8080 -j MASQUERADE

Итог:

Данные, отправленные от A к C: 8080, достигают B: 8080, но не C: 8080.

Я понимаю, что пропустил динамическую часть сервера C.

Что-то вроде rinetd или xinetd - вполне допустимый вариант для настройки переадресации портов. Вы просто должны защитить его, чтобы только сервер A мог получить к нему доступ.

Тогда на сервере A у вас есть два варианта. Вы можете просто подключиться к server_B: 8080 и будете подключены к server_C: 8080. Сервер B, очевидно, должен знать, как связаться с сервером C.

Если вам нужно использовать имя сервера C, ваше правило iptables должно перенаправлять трафик с порта 8080 на сервер B. Вы можете проверить это, запустив tcpdump на сервере B.