Действие как обратный прокси для необработанных пакетов TCP

Я пытаюсь использовать узел OVH в качестве обратного прокси для нескольких серверов Minecraft (главным образом для защиты DDoS и удовлетворения требованиям заказчика брандмауэра). Хосты Minecraft также выполняют человечность, или 12.04 или 14.04, и OVH имеет человечность на ней. В настоящее время я пытался делать это:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport port -j DNAT --to-destination ip:port
iptables -t nat -A POSTROUTING -j MASQUERADE

Это главным образом хорошо работает, за исключением очевидного, что у всех клиентов есть тот же IP как сервер, на котором я сделал это. Есть ли какой-либо способ, которым я могу настроить какое-либо из этих устройств так, чтобы он сохранил IP первоисточника? Я считал, что tcpproxy (http://www.quietsche-entchen.de/cgi-bin/wiki.cgi/proxies/TcpProxy) является хорошим решением этого, но я не вижу оснований, которые не продолжила бы эта проблема.

Я также задаюсь вопросом, если использование этого заставило бы ответы с сервера Minecraft обходить прокси, пропустив реальный IP, которого я хотел бы избежать.

1
задан 27 October 2014 в 22:02

1 ответ

Сохранение IP-адреса проксированного сервера не работало бы в Вашей ситуации. Если клиент первоначально соединится с прокси (то мы скажем proxy:1111), и получает ответ от minecraft1:2525, что клиент делает с ним. Нет никакого способа для клиента отобразить этот ответ на исходный запрос.

Продолжают делать его способ, которым Вы делаете его.

Вместо этого Вы могли использовать несколько наборов правила на диапазоне портов. Так, например, minecraft1 является proxy:1111, minecraft2 является proxy:1112, mincraft3 является proxy:1113, и т.д.

Тогда Вы могли установить свои правила как это:

iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination ip:port
iptables -t nat -A PREROUTING -p tcp --dport 1112 -j DNAT --to-destination ip:port
iptables -t nat -A PREROUTING -p tcp --dport 1113 -j DNAT --to-destination ip:port
iptables -t nat -A POSTROUTING -j MASQUERADE

Затем для соединения с minecraft1 Вы использовали бы proxy:1111. Для minecraft2, proxy:1112, и т.д. Порт, на котором работают фактические серверы Minecraft, не имеет значения, так как правила передадут к правильному порту.

2
ответ дан 11 November 2019 в 09:30

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

Похожие вопросы: