Підміна сервера. Емуляція інтернет-сервера


0

У мене є дві послідовні мережі, обидві сховані під власним NAT 192.168.31.0/24-> 192.168.33.0/24-> Інтернетом

У мене увімкнено сервер TCP 192.168.33.35і клієнт увімкнено192.168.31.32

Наприклад, клієнт робить запит TCP до сервера, який знаходиться в Інтернеті 66.66.66.66. Я хочу, щоб останній шлюз 192.168.33.1надіслав запит 192.168.33.35замість цього і обдурив клієнта.

Найбільш реально з того, що я спробував:

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

Сервер отримав пакет Syn і відповів. Але, схоже, вихідний IP відповіді сервера залишається 192.168.33.35після проходження шлюзу. І пакет втрачається, отриманий 192.168.31.1шлюзом.

Схоже, частина SNAT не працює.

Що я можу зробити, щоб емулювати / підробляти сервер за допомогою стандартних інструментів openWrt?


Ви емулюєте сервер чи просто намагаєтесь зрозуміти, як підробити шлях / пункт призначення / джерело пакету ICMP?
music2myear

@ music2myear, я емулюю сервер, як я писав у заголовку.
Pheu Verg,

2
Дивіться, заголовок статті чи назви книги узагальнює інформацію в статті чи книзі, вона не замінює і не містить унікальної інформації. Будь ласка, ставитесь до питань так само: Заголовок є підсумком, але не повинен містити унікальної інформації. Основне питання має містити ВСІ релевантні та необхідні відомості. Будь ласка, відредагуйте основу свого питання, щоб зробити його більш зрозумілим
music2myear

@KamilMaciorowski, саме
Pheu Verg

@ music2myear, насправді, IP-підробка є правильним терміном. Мене збентежило те, що я не роблю жодних протилежних дій. І все-таки я не можу знайти рішення (facepalm)
Pheu Verg

Відповіді:


1

Ось що відбувається:

  1. Ваш 192.168.33.35сервер бачить пакет Syn з 192.168.33.Z(він не знає про 192.168.31.0/24мережу і бачить "WAN" адресу 192.168.31.1шлюзу, я не знаю, що Zце) і відповідає на цю адресу.
  2. Її таблиця маршрутизації говорить, що ця адреса належить до локальної мережі, тому відповідь призначена для MAC-адреси 192.168.33.Z.
  3. Навіть якщо відповідь фізично проїжджає через 192.168.33.1машину, шлюз не маніпулює ним, оскільки призначений для MAC-адреси іншої машини.
  4. 192.168.33.Zбачить відповідь від 192.168.33.35. Він очікує від себе 66.66.66.66і не знає, що робити.

Зауважте, що не має значення 192.168.33.Zвиконує NAT (перебуваючи 192.168.31.1на його локальній стороні). Механізм виходу з ладу дуже схожий на той, де NAT-петля (шпилька NAT) лише частково налаштована .

Ви повинні змусити ваш 192.168.33.35сервер надсилати відповіді на MAC-адресу вашого 192.168.33.1шлюзу.

  • Або встановіть правило маршрутизації для 192.168.33.Z(пам’ятайте, я не знаю Z, ви замінюєте реальне число) або навіть для всієї 192.168.33.0/24мережі:

    # do this on the 192.168.33.35 machine
    route add -host 192.168.33.Z gw 192.168.33.1
    

    Зауважте, що це вплине на все спілкування від 192.168.33.35до 192.168.33.Z. У випадках, коли вони 192.168.33.35повинні діяти як 192.168.33.35пакети, будуть зайві маршрутизовані; він не повинен ламати речі.

  • Або нехай 192.168.33.1шлюз виконує не тільки DNAT, але і SNAT. Це рішення в основному те саме, що і для NAT циклу у вже пов'язаній відповіді:

    # do this on the 192.168.33.1 gateway
    # you already have this line
    iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
    # this line is new
    iptables -t nat -I POSTROUTING -d 192.168.33.35 -j SNAT --to-source 192.168.33.1
    

Цей фрагмент стосується вашої ситуації:

Зауважте, що таблиця NAT в iptablesвикористовується тільки для першого пакету з'єднання. Пізніші пакети, пов'язані з з'єднанням, обробляються за допомогою внутрішніх таблиць відображення, встановлених при перекладі першого пакету.

Це означає, що другий ваш рядок ( iptables … -j SNAT --to-source 66.66.66.66) не має значення під час ініціювання з'єднання з клієнтом. Пізніші пакети будуть належним чином SNAT-ed та DNAT-ed, оскільки перший пакет був.


Я думаю, якщо ваш перший рядок

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35

Діючи на 192.168.31.1шлюзі, це зробить те, що ви хочете для інших клієнтів, 192.168.31.0/24без додаткових хитрощів.


Цей другий твій рядок

iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

застосовується, якщо ви ініціюєте з'єднання з 192.168.33.35 . Інтернет-сервери рідко роблять це, тому це правило вам може не знадобитися. Якщо вам це знадобиться, пам’ятайте про це:

  • правило працює лише в тому випадку, якщо пакети будуть прокладені через 192.168.33.1шлюз, де діє це правило, щоб дістатися до локальних комп'ютерів і представити їм, як 66.66.66.66вам потрібно налаштувати таблицю маршрутизації на 192.168.33.35машині так само, як вище;
  • Ви не можете спілкуватися як 66.66.66.66із зовнішніми хостами (поза вашою мережею), тому що навіть якби вам вдалося зв'язатись із ними 66.66.66.66, вони реагують на реальні 66.66.66.66, а не на вас.

Дякую тобі за відповідь. Це прояснило мені деякі помилки. Але мені не вдалося це зробити за допомогою iptables навіть на прикладі, який ви пов’язали. Я зробив це по-іншому.
Pheu Verg

0

Зробив це з маршрутизацією. На жаль, вона менш гнучка для доступу до реального сервера, але принаймні працює. Щось на зразок цього:

root@192.168.33.1# route add -host 66.66.66.66 gw 192.168.33.35 dev br-lan

і на сервері:

user@192.168.33.35# ip link add name s666 type dummy
user@192.168.33.35# ifconfig s666 66.66.66.66
user@192.168.33.35# ifconfig s666 up
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.