LINUX.ORG.RU
решено ФорумAdmin

iptables фильтрация по DNS имени

 ,


1

1

Всем привет, помогите победить проблему.

Есть белый ip на шлюзе например 77.77.77.77

У провайдера есть две DNS записи для этого IP например host1.domain.ru и host2.domain.ru

В локальной сети есть 2 хоста с двумя сервисами с одинаковыми портами, сделать разные порты нельзя!!! у клиентов так же нельзя сделать разные порты!!! (((

как мне в iptables перенаправить запросы на эти локальные сервисы?

правила типа такого не помогают, все подключения так или иначе все равно идут на один локальный сервис что бы в у клиентов не было прописано ((( :

iptables -t nat -A PREROUTING -s <клиентский_ip> -d host1.domain.ru -p udp -m udp --dport 1111 -j DNAT --to-destination 192.168.1.10:1111
iptables -t nat -A PREROUTING -s <клиентский_ip> -d host2.domain.ru -p udp -m udp --dport 1111 -j DNAT --to-destination 192.168.1.100:1111

про решение методом балансировки знаю. есть ли еще способ?

Как я понял, проблема заключается в том, что при подключении клиентов на 77.77.77.77:1111 нужно перенаправить их на один из 2 хостов внутри сети.
Если нельзя поменять внешний порт для одного из клиентов, то попробуйте использовать nginx http://stackoverflow.com/questions/5337122/is-it-possible-to-forward-non-http...

getup ()

если это не http, то не важны DNS, так как клиент сначала разрешает имя в адрес и по нему обращается.

uspen ★★★★★ ()
Ответ на: комментарий от getup

проблема заключается в том, что при подключении клиентов на 77.77.77.77:1111 нужно перенаправить их на один из 2 хостов внутри сети

именно так, в глупой 1с в nethasp.ini есть возможность задать множества серверов менеджеров лицензий но только один порт

fordiego ()
Ответ на: комментарий от uspen

если это не http, то не важны DNS, так как клиент сначала разрешает имя в адрес и по нему обращается.

в этом то и проблема имен два а адрес то один и тот же и толку от правил приведенных в топике нет (

fordiego ()
Ответ на: комментарий от fordiego

При настройке сервера 1С как я понял можно задать порт. И следовательно вопрос можно решить на сервере. Но если это не устраивает то при конекте клиента прописать ИМЯСЕРВЕРА:ПОРТ все должно работать. У меня так крутится на одном линукс сервере 8.1 и 8.2 на разных портах и все нормально.

pvvking ★★ ()
Ответ на: комментарий от pvvking

При настройке сервера 1С как я понял можно задать порт. И следовательно вопрос можно решить на сервере

проблема не в сервере 1с, проблема в HaspLM в менеджере лицензий, его настройки осуществляются на стороне клиента в файле nethasp.ini

fordiego ()
Ответ на: комментарий от fordiego

есть два ключа 1с и соответственно два менеджера лицензий отсюда и грабли

fordiego ()

я ничего не понял. НЕЛЬЗЯ менять порт или ТЫ не можешь поменять?

на локальном сервере

iptables -A PREROUTING -t nat -p udp --dport 1112 -j REDIRECT --to-port 1111

а на роутере

iptables -t nat -A PREROUTING -s <клиентский_ip> -d host2.domain.ru -p udp -m udp --dport 1111 -j DNAT --to-destination 192.168.1.100:1112
uspen ★★★★★ ()
Ответ на: комментарий от fordiego

;
; NetHASP Configuration file syntax.

;;NH_PORT_NUMBER = <Num>		; Set the TCP/IP port number. This is
                                        ; optional. The default number is 475.

Это кусок конфига HASP, порт можно прописать.

pvvking ★★ ()
Ответ на: комментарий от uspen

я ничего не понял

в локальной сети есть два менеджера лицензий по 50 ключей, порт на этих менеджерах менять нельзя

на шлюзе есть один белый ip 77.77.77.77 и два DNS имени host1.domain.ru и host2.domain.ru

на клиентских ПК в интернетах есть клиент 1с в котором есть конфиг настройки лицензий HASP так называемый nethasp.ini в котором можно указать несколько менеджеров но порт можно указать только один!

при обращении клиента к менеджеру лицензий, клиент берет лицензионный ключ, если на менеджере нет свободных лицензий то клиент обращается к следующему менеджеру который указан в списке в файле nethasp.ini

поэтому необходимо две dns записи на один белый ip чтобы как то раскидать подключения клиентов по разным ключам

вроде все объяснил? ))

fordiego ()
Ответ на: комментарий от fordiego

как пример

NH_SERVER_ADDR = host1.domain.ru, host2.domain.ru   
                                        ; IP addresses of all the NetHASP 
					; License Managers you want to search.
					; Unlimited addresses and multiple
					; lines are possible.
					;
					; Possible address format examples:
					;  IP address:      192.114.176.65
					;  Local Hostname:  ftp.aladdin.co.il

NH_PORT_NUMBER = 475		        ; Set the TCP/IP port number. This is
					; optional. The default number is 475.

fordiego ()
Ответ на: комментарий от pvvking

вас на http://www.google.ru забанили наверно.

?? O_o вы читать не умеете чтоли?

нельзя задать свой порт для конкретного менеджера лицензий!!!111

у меня ДВА менеджера! ну и что с того что я посажу их на разные порты, в nethasp.ini я не могу задать порт для каждого менеджера свой!

вы же сами писали отрывок из nethasp.ini покажите мне как мне прописать свой порт на соответствующий менеджер лицензий ???777

fordiego ()
Ответ на: комментарий от fordiego

интересно если я вот так сделаю будет работать?

iptables -t nat -A PREROUTING -s <клиентский_ip> -d 77.77.77.77 -p udp -m udp -m string --string "host1.domain.ru" --algo kmp --dport 1111 -j DNAT --to-destination 192.168.1.10:1111

iptables -t nat -A PREROUTING -s <клиентский_ip> -d 77.77.77.77 -p udp -m udp -m string --string "host2.domain.ru" --algo kmp --dport 1111 -j DNAT --to-destination 192.168.1.100:1111

fordiego ()
Ответ на: комментарий от fordiego

если нет возможности использовать два белых ip адреса, тогда используйте какую нибудь vps арендуйте на просторах интернета и с нее уже перенаправляйте куда надо. Но это все костыли.

Выше уже говорили про HAproxy.

uspen ★★★★★ ()
Ответ на: комментарий от fordiego

Чувак разжовываем:

nethasp.ini ставится на клиенте в нем пишем

NH_SERVER_ADDR = 192.168.0.1  ; Список IP-адресов для серверов лицензий
NH_PORT_NUMBER = 475 

nhsrv.ini это конфиг HASPLM

NH_PORT_NUMBER = 475
pyatak123 ()
Ответ на: комментарий от fordiego

Будет, если внутри пакетов от 1C в чистом виде передается доменное имя. Причем внутри каждого пакета в рамках одной сессии (т.к. это udp).

getup ()

Я бы VPN поднял и не боролся бы с созданными собой же проблемами.

berrywizard ★★★★★ ()
Ответ на: комментарий от getup

да, кстати, это udp...

короче у человека желание любым способ сделать как-то, а не так как правильно (арендовать белый IP)

uspen ★★★★★ ()
Ответ на: комментарий от uspen

короче у человека желание любым способ сделать как-то, а не так как правильно (арендовать белый IP)

именно сейчас так и работает, смысл наоборот убрать еще один ip и все зарулить на один, изучаю возможности

fordiego ()
Ответ на: комментарий от getup

пометить надо с помощью CONNMARK

если внутри пакетов от 1C в чистом виде передается доменное имя. Причем внутри каждого пакета в рамках одной сессии (т.к. это udp)

это как? можно пример

fordiego ()
Ответ на: комментарий от getup

Будет, если внутри пакетов от 1C в чистом виде передается доменное имя. Причем внутри каждого пакета в рамках одной сессии (т.к. это udp).

не работает ((( бедапечаль

fordiego ()
Ответ на: комментарий от fordiego

Вы понимаете как работает DNS?

Если у вас host1.domain.ru и host2.domain.ru оба разрешаются в один и тот же 77.77.77.77 то разделить их на стороне шлюза нельзя. Т.к. разрешает IP адрес по имени клиент. И коннектится он уже именно к 77.77.77.77, неважно к host1 или к host2 он коннектился.

Так что даже когда вы в iptables пишите -d host[1|2].domain.ru, в момент запуска команды он разрешит его в IP 77.77.77.77 и в таблицу ядра уже передаст именно 77.77.77.77, без всяких имен.

Нет в заголовках IP пакетов доменов. Дальше только на уровне более высокого протокола решать, если там клиент передает имя домена. Например в HTTP имя хоста передается в строчке Host: заголовка. Так и работают виртуальные веб хосты на одном IP. Но т.к. у вас специфический протоком, допустим что там не передается имя домена нигде.

Так что либо отдельный порт, либо второй IP всё-таки.

nstorm ()
Ответ на: комментарий от fordiego

вполне есть, у меня два usb + 2 lpt ключа висят на одном сервере под linux. Говорят что могут глючить одинаковые модели ключей, но не сталкивался.

Atlant ★★★★★ ()
Последнее исправление: Atlant (всего исправлений: 1)
Ответ на: комментарий от Atlant

а ты пробуй, пробуй

загуглил данный вопрос, ответ: два ключа hasp одной серии (а у меня именно этот случай) на одном компьютере работать не будут, ни на linux ни на windows

ваще печаль с этой 1с...

fordiego ()

а что если такие костыли попробовать. поставить на клиенсткой машине rinetd. в нем транслировать порт 127.0.0.1:1111 на серверраздающийЛМ:2222 в nethasp.ini указать два сервера host1.domain.ru и localhost а уже на раздающем лм ключи серваки рулить порты 1111 на 192.168.0.100 а 2222 на 192.168.0.10

anonymous ()
Ответ на: комментарий от anonymous

спасибо, но уже не актуально... может будущим поколениям понадобится.

fordiego ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.