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

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



Последнее исправление: fordiego (всего исправлений: 1)

Как я понял, проблема заключается в том, что при подключении клиентов на 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
() автор топика
Ответ на: комментарий от pvvking

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

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

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
()
Ответ на: комментарий от Atlant

а может проще, посадить оба ключа на один сервер

не знаю есть ли такая возможность надо читать маны про hasp LM

fordiego
() автор топика
Ответ на: комментарий от 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
()
19 мая 2013 г.
Ответ на: комментарий от anonymous

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

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