Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: SOLVED: Вывести сервер за firewall  (Прочитано 1143 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн loud

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
SOLVED: Вывести сервер за firewall
« : 21 Март 2011, 06:59:44 »
Возможно это уже набившая оскомину тема, но я не нашел дополнительной информации как это сделать. Все что я нашел сводится к пробрасыванию портов для доступа снаружи внутрь по фэйковому порту с заменой на настоящий в DNAT. Мне же необходимо через шлюз на 10.10 вывести несколько серверов на внешние IP, предоставляемые провайдером.
Например имеем локальные сервера : 192.168.1.6, 192.168.1.2, ...
нужно полное маппирование скажем на адреса 82.232.101.35 и 82.232.101.38
на шлюзе 10.10 имеем /etc/network/interfaces:
(Нажмите, чтобы показать/скрыть)

Необходимо чтобы это выглядело как будто сервер целиком находится до firewalla при взгляде со стороны интернета, но при этом бы доступен по своему локальному адресу со стороны локальной сети.
Помимо этого необходимо раздать интернет в локаль стандартным маскарадингом - это единственное что у меня получилось в данный момент.
Предвидится небольшое усложнение, чтобы один из серверов был виден из локальной сети используя внешний IP адрес. До этого момента я использовал аппаратный роутер и там всё это бегало, но теперь надо перевести на шлюз 10.10 т.к. требуются дополнительные возможности по фильтрации траффика.
Собственно вопрос:
дайте пожалуйста ссылки или советы howto.

« Последнее редактирование: 23 Март 2011, 09:36:15 от loud »

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #1 : 21 Март 2011, 11:59:54 »
ну в твоем случае стало быть так
sudo iptables -t nat -A PREROUTING -i eth0 -d 84.232.102.35 -j DNAT --to-destination 192.168.1.6
sudo iptables -t nat -A PREROUTING -i eth0 -d 84.232.102.38 -j DNAT --to-destination 192.168.1.2

sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.6 -j SNAT --to-source 84.232.102.35
sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.2 -j SNAT --to-source 84.232.102.38
первые 2 правила это из инета в локалку , вторые 2 - наоборот, ну и сооотв. добавить необходимые правила в FORWARD

Пользователь решил продолжить мысль 21 Март 2011, 12:06:44:
а да и для инета
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source xxx.xxx.xxx.xxx
где xxx.xxx.xxx.xxx один из тех фиксированных ip  через который хочешь выпускать в инет ну и опять же необходимое правило в FORWARD добавить
« Последнее редактирование: 21 Март 2011, 12:07:44 от xeon_greg »

Оффлайн loud

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #2 : 21 Март 2011, 16:56:26 »
xeon_greg спасибо, буду проверять этой ночью (т.к. эта сеть в работе) чтобы поменьше на клиентов влияло. По результатам отпишусь.

вопрос по поводу добавить необходимые правила в FORWARD

-A FORWARD -i eth0 -dst 84.232.102.35 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -dst 192.168.1.6 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

это так (для одного сервера) или видится как-то по другому ?

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #3 : 21 Март 2011, 17:01:46 »
вот это неверно
Цитировать
-A FORWARD -i eth1 -dst 192.168.1.6 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
проще гораздо можно
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.6 -j ACCEPT
iptables -A FORWARD -o eth1 -i eth0 -d 192.168.1.6 -j ACCEPT

Пользователь решил продолжить мысль 21 Март 2011, 17:03:46:
только про политики цепочек не забывай , при политике ACCEPT все правила в них бессмысленны
« Последнее редактирование: 21 Март 2011, 17:03:46 от xeon_greg »

Оффлайн loud

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #4 : 22 Март 2011, 05:33:53 »
отлично, xeon_greg, спасибо, все работает. теперь вопрос про усложнение.
со стороны интернета web сервер работает прекрасно по адресу 84.232.101.38
но пользователь из нашей локальной сети 192.168.1.0/24 не может зайти по этому адресу ибо "The connection to the server was reset while the page was loading."
пинг на этот адрес из локальной сети есть. я подозреваю что это режектит firewall, хотя не понятно почему есть пинги.
на железном рутере (mikrotik) я нашел решение, но тут оно почему-то не катит, и сейчас я убрал его. Оно выглядело примерно так если перевести в язык iptables
iptables -t nat -A PREROUTING -i eth0 -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

где 1.2 - web server, 1.1 - данный настрайваемый шлюз
подскажи пожалуйста методологию, как отлаживать iptables ? (стыдно)
в частности интересует трафик попадающий в то или иное правило.
на всякий случай привожу iptables. видимо там есть что убрать и много что непонятно, будем читать.
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 22 Март 2011, 06:34:58 от loud »

Гарри Кашпировский

  • Гость
Re: Вывести сервер за firewall
« Ответ #5 : 22 Март 2011, 08:09:52 »
Цитировать
Предвидится небольшое усложнение, чтобы один из серверов был виден из локальной сети используя внешний IP адрес.
# Whole     : 84.232.102.32 - 84.232.102.47
# our range : 84.232.102.33 - 84.232.102.46
Сеть 84.232.102.32/28 - это сеть выданная Вам провайдером? По идее вполне реализуется без iptables.
Например c помощью vlan
                                 net 84.232.102.32/28
                    vlanX          /
ISP <----> Gate <-------------> Switch
                    vlanY          \
                                  net 192.168.1.0/24
Стоит уточнить поддержку 802.11q свитчем.
« Последнее редактирование: 22 Март 2011, 10:22:26 от KT315 »

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #6 : 22 Март 2011, 10:14:05 »
отлично, xeon_greg, спасибо, все работает. теперь вопрос про усложнение.
со стороны интернета web сервер работает прекрасно по адресу 84.232.101.38
но пользователь из нашей локальной сети 192.168.1.0/24 не может зайти по этому адресу ибо "The connection to the server was reset while the page was loading."
пинг на этот адрес из локальной сети есть. я подозреваю что это режектит firewall, хотя не понятно почему есть пинги.
на железном рутере (mikrotik) я нашел решение, но тут оно почему-то не катит, и сейчас я убрал его. Оно выглядело примерно так если перевести в язык iptables
iptables -t nat -A PREROUTING -i eth0 -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

где 1.2 - web server, 1.1 - данный настрайваемый шлюз
подскажи пожалуйста методологию, как отлаживать iptables ? (стыдно)
в частности интересует трафик попадающий в то или иное правило.
на всякий случай привожу iptables. видимо там есть что убрать и много что непонятно, будем читать.
(Нажмите, чтобы показать/скрыть)
зайти не можешь скорее всего из-за своего провайдера, поскольку где-то на каком-то из его шлюзов при передаче твоего запроса происходит коллизия, адрес источника совпадает с адресом назначения и такие пакеты убиваются. у себя на работе наблюдаю такую же картину имею 2 сатитки с 1 провайдера (правда через разные интерфейсы, но это особого значения в данном случае не имеет), так вот с одной статики не могу зайти на другую...по tracert можешь проследить через какой шлюз тебя выпускает провайдер по одной и 2 статике и все поймешь...   а пинг  отдает как раз тот самый шлюз
потом
Цитировать
:INPUT ACCEPT [135513:11386306]
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 2210 -j ACCEPT
вот это правило у тебя не имеет смысла , посколку политика в этой цепочке по умолчанию ACCEPT
Цитировать
-A PREROUTING -p tcp -m tcp --dport 2210 -j DNAT --to-destination 192.168.1.250:2210
в такого вида правилах желательно указывать входящий интерфейс , поскольку будет натится трафик на всех интерфейсах, в том числе где это и не нужно...
и еще чтобы тебе первое время легче ориентироваться попадает трафик в ту или иную цепочку смотри на счетчики пакетов в цепочках (они в квадратных скобках) iptables-save -c (будет их показывать) , iptables -L -n -v тоже
« Последнее редактирование: 22 Март 2011, 10:16:19 от xeon_greg »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 748
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #7 : 22 Март 2011, 14:49:11 »
со стороны интернета web сервер работает прекрасно по адресу 84.232.101.38
но пользователь из нашей локальной сети 192.168.1.0/24 не может зайти по этому адресу ибо "The connection to the server was reset while the page was loading."
Надо прочитать про DNAT. Там есть пример с веб сервером как раз.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27305
    • Просмотр профиля
Re: Вывести сервер за firewall
« Ответ #8 : 22 Март 2011, 15:41:12 »
вот это неверно
Цитировать
-A FORWARD -i eth1 -dst 192.168.1.6 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
проще гораздо можно
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.6 -j ACCEPT
iptables -A FORWARD -o eth1 -i eth0 -d 192.168.1.6 -j ACCEPT
Не проще
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн loud

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
SOLVED: Вывести сервер за firewall
« Ответ #9 : 23 Март 2011, 09:35:12 »
большое спасибо всем откликнувшимся, в том числе xeon_greg и особенно aSmile за конкретную ссылку на пункт 6.5.2. Действие DNAT в документации, где и описан мой случай. в результате чтобы локальный web север 192.168.1.2 был виден по адресу 84.232.101.38 как изнутри так и снаружи шлюза 192.168.1.1 необходимо
iptables -t nat -A PREROUTING -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.1.2 --dport 80 -j SNAT --to-source 192.168.1.1
требовалось некоторое время чтобы понять умом отличие
iptables -t nat -A PREROUTING -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
от
iptables -t nat -A PREROUTING -d 84.232.101.38 -i eth0 -j DNAT --to-destination 192.168.1.2
ибо в первом случае работает а во втором - нет. и только прочтя документ стало понятно что пакеты попадают под это правило с обоих интерфейсов

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
Re: SOLVED: Вывести сервер за firewall
« Ответ #10 : 23 Март 2011, 10:18:17 »
немного уточню
Цитировать
iptables -t nat -A PREROUTING -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.1.2 --dport 80 -j SNAT --to-source 192.168.1.1
а зачем необходимо заходить из локальной сети на локальный web-сервер через такие дебри с двойным преобразованием адреса ? при том что на самом деле при таком подходе вход на него все равно выполняется локально

Оффлайн loud

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: SOLVED: Вывести сервер за firewall
« Ответ #11 : 23 Март 2011, 10:36:22 »
Это необходимо в связи с содержимым web сервера, активный контент которого пляшет от адреса www.domain.com, т.е. от содержимого dns записи провайдера www.domain.com = 84.232.101.38. Короче говоря, если сейчас зайти на сайт по адресу 84.232.101.38 изнутри или снаружи, то всё выглядит хорошо, а если изнутри по адресу 192.168.1.2 - то все печально. Ну не печально, а некорректно отображается.

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 748
    • Просмотр профиля
Re: SOLVED: Вывести сервер за firewall
« Ответ #12 : 23 Март 2011, 10:39:41 »
немного уточню
Цитировать
iptables -t nat -A PREROUTING -d 84.232.101.38 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.1.2 --dport 80 -j SNAT --to-source 192.168.1.1
а зачем необходимо заходить из локальной сети на локальный web-сервер через такие дебри с двойным преобразованием адреса ? при том что на самом деле при таком подходе вход на него все равно выполняется локально
Чтобы пользователи вводили не ip-адрес, а имя домена. Хотя, конечно, можно dns настроить.

 

Страница сгенерирована за 0.153 секунд. Запросов: 24.