URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 94588
[ Назад ]

Исходное сообщение
"Внутренний сайт, nat и проброс портов"

Отправлено alesha , 15-Апр-13 14:37 
Здравствуйте!
Помогите, пожалуйста, разобраться в ситуации.

Есть маленькая локальная сеть с одним выходом в интернет.
Есть компьютер "А", который работает шлюзом (две сетевые, ipfw, nat, proxy).
Есть компьютер "Б", который работает веб-сервером (одна сетевая).
Есть компьютер "В", который просто компьютер (одна сетевая).

Компьютер "А" даёт доступ компьютерам "Б" и "В" наружу, и переадресует http запросы снаружи на веб-сервер "Б". Всё прекрасно работает, интернет есть, веб-сайт извне виден. Проблема в том, к этому самому сайту не получается получить доступ с компьютера "В".

То есть, получается запрос от компьютера "В" сначала проходит через первый nat, а потом должен пройти через второй, который сделает "redirect_port" и где-то вот тут что-то и происходит.

По условиям задачи, обращаться к внутреннему веб-сайту можно только по внешнему адресу.

Задача сейчас вроде бы решена прописыванием в hosts компьютера "В" соответствия между внешним dns-именем веб-сервера и его внутренним (локальным) адресом. Интересует, может ли она решаться без этого.


====
Внешний адрес шлюза: 53.54.55.56
Внутренний адрес шлюза: 192.168.0.150
Внутренний адрес веб-сервера "Б": 192.168.0.221
Внутренний адрес просто компьютера "В": 192.168.0.200
====

#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add"
skip="skipto 800"
pif="rl0"
pip="53.54.55.56"
prnet="192.168.0.0/24"
ipfw -q nat 1 config log if $pif
ipfw -q nat 2 config if rl0 same_ports redirect_port tcp 192.168.0.200:3389 33333 redirect_port tcp 192.168.0.221:80 80 redirect_port tcp 192.168.0.221:9123 9123 redirect_port tcp 192.168.0.221:1935 1935
ipfw -q table 0 flush
ipfw -q table 0 add 8.8.8.8
ipfw -q table 0 add 8.8.8.8
ipfw -q table 0 add 8.8.8.8
ipfw -q table 1 flush
ipfw -q table 1 add 26.27.28.29
ipfw -q table 1 add 26.27.28.30
ipfw -q table 1 add 26.27.28.31

$cmd 005 allow all from any to any via vr0
$cmd 008 fwd 127.0.0.1,3128 ip from 192.168.0.0/24 to any dst-port 80,8080 out xmit rl0
$cmd 010 allow all from any to any via lo0

$cmd 014 nat 2 tcp from table\(1\) to $pip 33333 in recv rl0
$cmd 015 nat 2 tcp from 192.168.0.200 3389 to any out xmit rl0
$cmd 016 nat 2 tcp from any to $pip 80,9123,1935 in recv rl0
$cmd 017 nat 2 tcp from 192.168.0.221 80,9123,1935 to any out xmit rl0
$cmd 019 nat 1 ip from any to $pip in recv rl0

$cmd 050 allow tcp from $pip to any 80 out xmit $pif
$cmd 055 allow tcp from $pip to any 443 out xmit $pif
$cmd 060 allow tcp from $pip to table\(0\) 53 out xmit $pif
$cmd 065 allow udp from $pip to table\(0\) 53 out xmit $pif
$cmd 070 allow tcp from $pip to any out xmit $pif uid root
$cmd 075 allow icmp from $pip to any out xmit $pif
$cmd 080 allow tcp from $pip 53133 to table\(1\) out xmit $pif
$cmd 081 allow tcp from $pip 33333 to table\(1\) xmit $pif
$cmd 082 allow tcp from 192.168.0.200 3389 to any out xmit rl0
$cmd 083 allow tcp from 192.168.0.221 80,9123,1935 to any out xmit rl0
$cmd 084 allow tcp from $pip 80 to any out xmit $pif
$cmd 085 skipto 800 tcp from 192.168.0.200 to any 25,110,443,6669,53134 out xmit rl0

$cmd 0100 allow tcp from table\(0\) 53 to $pip in recv $pif
$cmd 0101 allow udp from table\(0\) 53 to $pip in recv $pif
$cmd 0105 allow tcp from any 80 to $pip in recv $pif
$cmd 0110 allow tcp from any 443 to $pip in recv $pif
$cmd 0115 allow tcp from table\(1\) to $pip 53133 in recv $pif
$cmd 0120 allow icmp from any to $pip in recv $pif

$cmd 320 deny tcp from any to any 137 in recv $pif
$cmd 321 deny tcp from any to any 138 in recv $pif
$cmd 322 deny tcp from any to any 139 in recv $pif
$cmd 323 deny tcp from any to any 81  in recv $pif
$cmd 400 deny log all from any to any in recv $pif
$cmd 450 deny log all from any to any out xmit $pif

$cmd 800 nat 1 ip from $prnet to any out xmit $pif
$cmd 801 allow ip from any to any

$cmd 999 deny log all from any to any


Содержание

Сообщения в этом обсуждении
"Внутренний сайт, nat и проброс портов"
Отправлено Exploit , 15-Апр-13 15:45 
> По условиям задачи, обращаться к внутреннему веб-сайту можно только по внешнему адресу.

Под внешним адресом подразумевается днс-адрес?
Если да, то может проще поднять внутренний днс-сервер и вашему www.site.com прописать локальный ip?


"Внутренний сайт, nat и проброс портов"
Отправлено Mr. Mistoffelees , 15-Апр-13 16:06 
>> По условиям задачи, обращаться к внутреннему веб-сайту можно только по внешнему адресу.

Решение задачи называется DNS view.

WWell,



"Внутренний сайт, nat и проброс портов"
Отправлено alesha , 16-Апр-13 03:08 
Спасибо большое за ответы, но насчёт манипуляций с ДНС всё более-менее понятно.

Насчёт IPFW какие-нибудь варианты могут быть?


"Внутренний сайт, nat и проброс портов"
Отправлено Аноним , 16-Апр-13 10:02 
> Спасибо большое за ответы, но насчёт манипуляций с ДНС всё более-менее понятно.
> Насчёт IPFW какие-нибудь варианты могут быть?

Скажу честно, с IPFW вам непросто будет это сделать. Дополнительный редирект - это, как правило, еще один инстанс ната. Вэб сервер у вас прямо линком с роутером или через коммутатор?
Если через коммутатор, то можно настроить к нему одностороннюю видимость. Т.е. доступ к нему из локальной сети с правилом keep-state, а все исходящие в локалку - блокировать.
Тогда на роутере пишете правило с fwd и указываете адрес вэб сервера.

Если вэб-сервер напрямую с роутером отдельным линком со своей адресацией, то тогда, вводите еще один нат на внутреннем интерфейсе и возможно в позе revers. В общем, экспериментируйте!


"Внутренний сайт, nat и проброс портов"
Отправлено XoRe , 16-Апр-13 20:04 
Средствами ipfw на шлюзе:
ipfw forward 192.168.0.221 tcp from 192.168.0.200 to 53.54.55.56 dst-port 80 in recv rl0
Возможно придется на веб сервере добавить на lo0 внешний ip адрес шлюза.

P.S.
Я бы посоветовал на шлюзе поднять nginx с таким конфигом:
listen 80;
location /
{
  proxy_pass http://192.168.0.221;
}
И не нужны пробросы портов, тем более http (который проксируется на ура).

Ещё вариант - тупо редирект порта.
Для этого можно использовать redir (есть в портах), или xinetd (умеет делать редирект порта).
Хотя я порекомендовал бы nginx - он решит проблемы, которые у вас, возможно, появятся в будущем.


"Внутренний сайт, nat и проброс портов"
Отправлено alesha , 17-Апр-13 06:40 
> Средствами ipfw на шлюзе:
> skipped
> Я бы посоветовал на шлюзе поднять nginx с таким конфигом:
> skipped
> Ещё вариант - тупо редирект порта.
> skipped

Благодарю Вас!