The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Проброс реального IP с внешнего сервера на домашнюю машину (tunnel vpn linux route vtun policy iproute2)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: tunnel, vpn, linux, route, vtun, policy, iproute2,  (найти похожие документы)
From: Alexey Kovyrin <alexey@kovyrin.net.> Date: Mon, 10 Mar 2008 18:21:07 +0000 (UTC) Subject: Проброс реального IP с внешнего сервера на домашнюю машину Оригинал: http://blog.kovyrin.net/2006/04/02/provider-independent-ip-address/lang/ru/ Как получить "не зависящий от провайдера" IP-адрес для домашнего сервера Несколько лет назад я решил отказаться от использования внешних почтовых сервисов решил купить домен и настроить домашний сервер для приема всей моей корреспонденции. Работа была завершена очень быстро и я получил свой работающий на домашнем сервере почтовый домен! Некоторое время все работало гладко и ничего не предвещало проблем. Я споекйно наслаждася полным контролем над потоками почты в мой ящик.. Но немного позже мой провайдер решил удешевить мой способ подключения (для себя) и назначить приватный IP-адрес для моего сервера(192.168.192.2). Не сложно предположить, с этого момента мой почтовый сервер перестал быть доступен из реального мира и мой почтовый домен перестал функционировать. Самым простым решением было бы переставить MX-записи моего домена на реальный мейл-сервер во внешней сети и использовать fetchmail или что-то похожее для доставки почты на домашний сервер. Но это решение не было достаточно гибким и я решил взять один из адресов, принадлежащих IP-пулу моего работодателя (я работаю на хостинговую компанию) и назначить его на мой домашний сервер, сделав его таким образом доступным для реального мира. Вы можете сказать: "Это невозможно! Нельзя назначить чужой реальный IP на интерфейс внутри приватной сети другого провайдера!". Да, в общем случае это так и есть, но при помощи небольшой хитрости с использованием Linux policy routing и тунеллирования это становится возможным. Эта статья расскажет Вам, как это можно сделать. Во-первых, я выбрал один из адресов (RE.AL.AD.DR) в сети моего работодателя и организовал ip-over-tcp тунель с домашнего сервера на один из хостинговых серверов технической площадки работодателя. Это было сделано при помощи отличного средства для построения тунелей под UNIX - утилиты vtun от Максима Краснянского. Конфигураионные файлы для обоих серверов будут представлены позже в этой статье. На данном шаге я получил следующие интерфейсы со стороны на "мирового" и домашнего серверов: Сторона "мирового" сервера: #ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.200.0.1 P-t-P:RE.AL.AD.DR Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1450 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:546 (546.0 b) TX bytes:494 (494.0 b) Сторона домашнего сервера: #ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:RE.AL.AD.DR P-t-P:10.200.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1450 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:494 (494.0 b) TX bytes:546 (546.0 b) В приведенных выше выдержках используются 2 IP-адреса: * RE.AL.AD.DR - реальный IP-адрес, который был установлен на тунеле со стороны домашнего сервера. * 10.200.0.1 - произвольно выбранный (мною) приватный IP-адрес на "мировом" сервере. Далее, мне нужно было заставить мой домашний сервер отправлять ответы на все запросы к сервисам по адресу RE.AL.AD.DR через тунельный интерфейс. Этой цели удалось добиться использую следующий надор команд для конфигурирования Linux policy routing в скрипте подьема тунельного интерфейса: ip "rule add fwmark 65 table hof"; ip "route add default via 10.220.0.1 dev tun0 table hof"; firewall "-t mangle -A PREROUTING -s RE.AL.AD.DR -j MARK -set-mark 65''; firewall "-t mangle -A OUTPUT -s RE.AL.AD.DR -j MARK -set-mark 65''; Эти команды добавляют в систему новую таблицу маршрутизации с именем hof (для которой необходимо добавить отдельную строку в файле /etc/iproute2/rt_tables в виде "имя_таблицы числовой_идентификатор"), затоем добавляют в созданную таблицу маршрут по-умолчанию через конец тунеля на стороне "мирового" сервера и, наконец, помечают все пакеты с адреса RE.AL.AD.DR для маршрутизации при помощи таблицы hof. Последним шагом необходимо было настроить "мировой" сервер так, чтобы он анонсировал при помощи arp-фреймов адрес RE.AL.AD.DR со своим MAC-адресом в ethernet-сеть в сторону своего маршрутизатора. Я использовал для этого маленькую утилиту farpd из официального репозитария дистрибутива Debian GNU/Linux. При помощи этой утилиты возможно анунсирование любого IP-адреса при помощи arp-фреймов в сеть, соединенную с определенным интерфейсом сервера: /usr/sbin/farpd -i eth0 RE.AL.AD.DR Вот и все! После выполнения описанных шагов, любое ПО на моем домашнем сервере, настроенное на использование моего нового IP-адреса address (RE.AL.AD.DR) будет доступно из реального мира сети Internet. На данный момент я могу без проблем менять провайдеров, обеспечивающих мне доступ в Сеть и это никак не повлияет на работу моего сервера так-как мой IP постоянно перемещается вместе со мною. Как я и обещал, фрагменты конфигурационных файлов для vtun доступны для удобного скачивания: Сторона "мирового" сервера: scoundrel-hof { passwd somepass; # Password type tun; # IP tunnel proto tcp; # UDP protocol compress zlib:9; # LZO compression level 9 keepalive yes; # Keep connection alive up { # Connection is Up ifconfig "%% 10.220.0.1 pointopoint RE.AL.AD.DR mtu 1450"; ifconfig "%% up"; }; down { ifconfig "%% down"; }; } Сторона домашнего сервера: scoundrel-hof { passwd somepass; # Password type tun; # Device tun persist yes; # Persist mode encrypt no; # No encryption stat yes; device tun0; up { ifconfig "%% RE.AL.AD.DR pointopoint 10.220.0.1 mtu 1450"; ip "rule add fwmark 65 table hof"; ip "route add default via 10.220.0.1 dev %% table hof"; firewall "-t mangle -A PREROUTING -s RE.AL.AD.DR -j MARK --set-mark 65"; firewall "-t mangle -A OUTPUT -s RE.AL.AD.DR -j MARK --set-mark 65"; }; down { ifconfig "%% down"; ip "rule del fwmark 65 table hof"; ip "route del default via 10.220.0.1 dev %% table hof"; firewall "-t mangle -D PREROUTING -s RE.AL.AD.DR -j MARK --set-mark 65"; firewall "-t mangle -D OUTPUT -s RE.AL.AD.DR -j MARK --set-mark 65"; }; } Удачи Вам в ваших испытаниях описанной схемы получения собственного выделенного не зависимого от провайдера IP-адреса! :-)

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, batr, 13:34, 18/07/2008 [ответить] [смотреть все]
  • +/
    Бред....Обе стороны туннеля в приведенном варианте никогда не найдут друг друга.  Для поднятия туннеля через интернет нужны интерфейсы с реальными адресами на обоих концах. А уж тогда на сам туннель тогда можно вешать приватные. Автор тут врет
     
  • 2, Сергей, 11:48, 21/07/2008 [ответить] [смотреть все]
  • +/
    достаточно чтоб у принимающей стороны был реальный, а у вызывающей доступ через NAT
     
  • 3, Lxa, 12:35, 08/09/2008 [ответить] [смотреть все]
  • +/
    а на 2 стороне слабо поднять VPN  сервер, и получать от него реальный ip )
     
  • 4, nikolay, 09:10, 14/04/2009 [ответить] [смотреть все]
  • +/
    Автор чето на колбасил!
    Проще через NAT iptables сделать и рабоать будет нормально.
     
  • 5, bogus, 19:54, 30/09/2009 [ответить] [смотреть все]
  • +/
    еще один велосепед
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor