Есть три сервера: 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.