Я пробовал этот случай, используя функцию NAT в iptables, но не смог
пример. ПК A IP - 1.1.1.1 (Win7) Мой IP-адрес сервера - 2.2.2.2 (CentOS 6.2) целевой сервер B - 3.3.3.3 (Windows server 2003)
Поток: ПК A WanIP -> Мой сервер A -> Сервер B (WanIP)
Мои правила iptables:
1. iptables -t nat -A PREROUTING -d 2.2.2.2 -p tcp --dport 80 -j DNAT --to-destination 3.3.3.3:80
2. iptables -t nat -A POSTROUTING -d 2.2.2.2 -j MASQUERADE
наконец, я могу получить доступ к веб-сайту сервера B, введя 2.2.2.2:80
но когда я проверил журнал доступа на сервере B, я обнаружил, что его исходный адрес был изменен на src: 2.2.2.2 dst: 3.3.3.3
пожалуйста, помогите мне сделать, как получить реальный адрес src: 1.1.1.1 dst: 3.3.3.3
Удалите строку
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j MASQUERADE
Это переписывает исходный адрес на сервер А (2.2.2.2
). Вы можете обнаружить, что его удаление нарушает многие другие вещи, но эта линия в настоящее время выполняет то, что, по вашему мнению, вы не хотите делать.
редактировать: как я сказал, "вы можете обнаружить, что его удаление нарушает многие другие вещи". Особенно, если окажется, что реальный адрес ПК A, реальный адрес сервера B или оба являются адресами RFC1918 (т. Е. Частными адресами из диапазонов 10/8, 172.16 / 12 и 192.168 / 16), тогда вы будете необходимо решить, как исключить этот проход из NAT, не нарушая NAT для всего остального, и разобраться с маршрутизацией для возвращаемого половинного трафика, что вполне может потребовать root на сервере B. Поскольку вы решили отредактировать все IP-адреса в на ваш вопрос, и мы ничего не знаем ни о таблицах маршрутизации на ПК, ни на сервере B, ни о каких-либо других ваших текущих правилах брандмауэра, трудно сказать, насколько это будет необходимо или проблематично.
Небольшое предложение: может быть, вы можете использовать прокси вместо пересылки iptables? Вы можете добавить заголовок X-Forwarded-For, и в ваших журналах доступа будет отображаться правильный IP-адрес.