Сервер на несколько сетей.

Теги:
 

jem

новичок
Поставили мускульный сервер, прописали ИП. Проблема в том, что внешние ИП сервер вообще никак не хочет воспринимать. Все коннекты кидает на внутренний. Прописывание доступа к гейм-серверу через имя домена также не катит - сервер резольвит его и отдаёт внешним клинетам внутренний ИП. Внешних Ип несколько и сеток несколько. Получается, что сервер может сидеть и слушать только один из ИП. Как можно решить проблему доступа к серверу извне с разных сеток?
 

Drac

разработчик l2j-сервера

Обсуждали уже 5 раз. Чтобы сервер резолвил все IP, которые есть на машине, просто вместо определенного IP-адреса в полях ExternalHostName и InternalHostName поставь * , что и будет означать, что логин-гейм-серверы смотрят на все интерфейсы сети.

Кстати, могут быть проблемы, если сеть представляет собой цепь маршрутизаторов с ответвлениями, у нас на маршрутизаторах разрешено все, а подсеть, находящаяся через 1 маршрутизатор от нас, не видит сервера.
 

jem

новичок
Так я же говорю - при прочих настройках - посылает клиента только на внутренний адрес машины. На "*" сервер чхает как может. Такое впечатление, что сервер только внутренний адрес интересует. Уже на гейтах пробовал поднимать отдельные серверы, пробую авторизовать пользователя локально (через общую мускульную базу), но на машину с сервером отправлять с помощью фаервала с NAT`ом. Нифига. Тот (настояший) сервер говорит, что неправильный кей для сессии (вобщем-то правильно говорит, ведь кей выдал совсем другой сервер). Как раскидать сервер на несколько сетей?
 

jem

новичок
При постановке во внутреннем и внешнем ИП звёздочек, сервер при попытке соединения говорит следующее:
java.net.UnknownHostException: *: *
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at net.sf.l2j.loginserver.ClientThread.run(ClientThread.java:106)
 
+
-
edit
 

pcworld

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

jem

новичок
Вопрос. Я прописал два ИП. Один Как internal, второй как external. Запустил на машине, где доступны обе сети (но сети не сообщаются, то есть гетвея нету). Абсолютно всех пользователей сервер отправляет на internal интерфейс. Пробовал разные java-серверы, эффект один и тот же. Для чего существует настройка мифического внешнего интерфейса?
 
RU deadcreator #05.03.2006 19:25
+
-
edit
 

deadcreator

новичок
Что то тема умерла а ведь она актуальна,потому как всё выше описанное правдиво - не работает.
В моём случае

лок.сеть -->сервер<-- подкл.по модему

Хоть как выставляй ip всё равно не пашет.
http://pfn-network.narod.ru  
RU deadcreator #12.03.2006 04:09
+
-
edit
 

deadcreator

новичок
Ща материться начну млин...Что нет ответа?
http://pfn-network.narod.ru  

DAMEX

новичок
у меня таже проблема сказали рыться с сырцах в javanetsfl2jutilUtil.java
~~~Я просто верю в то, что рушить догмы, Лучший способ не стареть, Что песни могут останавливать бомбы, И в то, что тишина - это смерть. @ DAMEX  
+
-
edit
 

LuciferX

втянувшийся
правильно, у тебя обе сети "локальные" т.е. сервер видя IP начинающийся с 192.168. и с 10. всех с этих IP посылает на InternalHostname= и хоть ты раком встань :D
а чтобы этого не было тебе нужно снять и автоопределения IP с началом 10. (я читал твой случай - у тебя это какраз внешняя сеть) и твой IP в этой сети вписать в ExternalHostname= ... все будет гут тогда
Владение русским языком как боевое искусство: настоящие мастера не используют без необходимости.  

DAMEX

новичок
все такие умные прям я сделал проще в хостах вписал моё доменне имя и сопоставил его с обоими IP и всё как ни странно пошло и у тех и у тех)
~~~Я просто верю в то, что рушить догмы, Лучший способ не стареть, Что песни могут останавливать бомбы, И в то, что тишина - это смерть. @ DAMEX  

jem

новичок
Каким образом сопоставил с доменным именем? У меня про пирописывании в качестве IP доменного имени при запуске сервера вызывает резольвинг и клиенту всё равно выдаётся IP, а не имя.
 
RU freerider #10.04.2006 07:43
+
-
edit
 

freerider

новичок
Народ, у меня тупой вопрос.
Я когда ip выставляю(вроде правильно выставляю) никто из сетки ко мне не может подконнектится(а порой даже меня не пускает, т.е. ввожу логин и пароль, он показывает мой сервак с пингом 0 и не пускает)
На самом деле меня пускает только когда все ip кроме external равны 127,0,0,1 бред какой то
Хочу то, что вижу, но вижу то, чего нет...  
+
-
edit
 

Animal

новичок
Писал на другом форуме :

Мой ip 172.16.0.120
Второй комп 172.16.0.12 / Он же подключен к другой сети (172.17.25.151)
На втором есть шлюз между сетями .
Но ввиду проблем с администрацией шлюз типа закрыт и нужно извращатся чтоб без его использования. Т.е. просто перекинуть порты.
Опытнам путем было проверенно что нужно пропускать пакеты по 2106 и 7777 портам.
Пакеты 2106 используются как бы для аутирификации.
Потом начинают ходить судя по всему только по 7777
Вот тут проблема и появляется.

Идет 2106 из сети 172.17.x.x поподает на 172.17.25.151 оттуда перебрасывается на 172.16.0.12 и идет на 172.16.0.120.
Но вот почему то пакет по порту 7777 идет напрямую .
Тоесть устанавливается соединение 172.16.0.120<>172.17.x.x вместо
17216.0.120<>172.16.0.12=172.17.25.151<>172.17.x.x


На компе 172.16.0.12 следующие :
-A PREROUTING -d 172.17.25.151 -p tcp -m tcp --dport 7777 -j DNAT --to-destination 172.16.0.120
-A PREROUTING -d 172.17.25.151 -p tcp -m tcp --dport 2106 -j DNAT --to-destination 172.16.0.120


Вообщем полное хз.

Если закрыть шлюз то ничего никуда не ходит .
В настройках серва все ip забиты на 172.16.0.120 .
 



Вот тут где-то пришол к такому выводу :

Вообщем как я понял соединение идет так :
Клиент лезет к логин серверу попорту 2106.
Тот по этому же порту отсылает адресс игрового сервера.
И клиент лезет уже на адрес сервера который прислал ему логин и абсолютно не важно что прописанно в хостах или в l2.ini.

Т.е в теории достаточно подменять пакеты на выходе из клиента.
Что в заголовке было не то что прислал логин сервер

В линухе легко делается коммандой :
iptables -t nat -A OUTPUT -d 172.16.0.120 -j DNAT --to-destination 172.17.25.151

А вот в виндах прийдется судя по всему писать прожку.....

МодераторыАдминистраторы поправте если я ошибся.......!!!!!!!!!!!!!!!!!!!!


ЗЫ И вообще что то в последнее время не видно здесь их.
Будем надеятся что они усиленно рабоотают над сверх новой версисей серва.....!!! =D
Ну или отдыхают перед работой над сабжем =))) Тож надо!
 




Для людей у которых на комп заведено 2 сети прокатит это :

Как модифицировать сервер, чтобы можно было играть на нем из двух
разных локальных сетей (не LAN+WAN), а LAN + LAN. Самый простой вариант это сервер подключенный к двум разным провайдерам, без выхода в интернет. Причем большим провайдерам с разными ip диапазонами, шлюзами и тд.

Мануаль по пунктам
(для примера возмем сервер с двумя сетевыми картами и двумя ip
10.0.1.14.40 (и сетью за ней 10.0.*.*) и 10.101.21.1 (и сетью за ней
10.*.*.*)
1) Из папки СЕРВЕРgameserver берем l2jserver.jar, разворачиваем его rar-ом, получаем папку l2jserver
2) идем в l2jservernetsfl2jutil
3) открываем любым HEX едитором фаил Util.class
4) находим 192.168. меняем на 10.0.14.
5) находим 10. меняем на 11.
Сохраняем
6) Архивируем содержимое папки l2jserver в l2jserver.zip
переименовываем в l2jserver.jar
7) Копируем этот jar туда откуда он родом, то есть в папку сервера,

Теперь нам нужно тоже саме сделать с логин сервером
Cool Просто копируем модифицированный l2jserver.jar в папку СерверLogin

теперь правим конфиги
в gameserver.properties должен быть так:
ExternalHostname=10.101.21.1
InternalHostname=10.0.14.40

loginserver.properties должен быть так:
ExternalHostname=10.101.21.1
InternalHostname=10.0.14.40


Теперь пояснение что мы делали:

Когда у нас две сетевые карты с локалками, и нет возможности прописать роуты или ДНС, то клиент коннектится к Login-серверу, то логин сервер проверяет откуда пришел клиент. видя то что он пришел с ip начинающегося на 10., cервер решает что клиент из локалки и отдает ему указание присоединится к игровому серверу по IP прописанному в InternalHostname
Все хорошо пока к серваку лезут люди с локалки через сетевуху с IP=InternalHostname, но как толькона сервак прийдет клиент через другую сетевую карту, то есть у которой IP не InternalHostname, то получится следующее, он прицепится к логин серверу , логин сервер даст указание прицепиться к игровому серверу , по IP=InternalHostname,
НО У ЭТОГО КЛИЕНТА, НЕТ ДОСТУПА к InternalHostname (сервер считает что internalhostname может быть только один.) он его просто не знает

Меняя 192.168. на 10.0.14. мы говорим серваку,
что все клиенты с 10.0.14.х являются внутренними и они должны получать InternalHostname для соединения с игровым сервером

Меняя 10. меняем на 11., мы говорим серваку, что остальные клиенты, кто пришел с адреса 10.х.х.х являются внешними... и получают ExternalHostname для игрового сервера
Почему 11 !?... можно было написать хоть 99, не важно, важно было убрать эту проверку на 10., которая подгребает всех клиентов с 10.х.х. под InternalHostname

Отдельное спасибо автору vitacite
 



ЗЫ Взято с desireland.ru
ЗЫЫ Сорь за типа флуд. Но я надеюсь комунить разъяснит ситуацию.


А вот это писал тута , но все что то поморозились :


 

jem

новичок
Я так понимаю, самое правильное это заставить сервер выдавать клиенту не IP сервера, а доменное имя. А клиенту это имя попросту соотносить в hosts`е. Где пропатчить сервер, чтобы он не резольвил имя из настроек внутреннего и внешнего IP?
 
+
-
edit
 

Animal

новичок
Я так понимаю, самое правильное это заставить сервер выдавать клиенту не IP сервера, а доменное имя. А клиенту это имя попросту соотносить в hosts`е. Где пропатчить сервер, чтобы он не резольвил имя из настроек внутреннего и внешнего IP?
 


Или заставить клиента ходить в нужном направлении.
 

jem

новичок
Или заставить клиента ходить в нужном направлении.
 

Это борьба со следствием, а не причиной.
 
+
-
edit
 

Animal

новичок
Но имхо легче заставить клиента ,чем переписать сервер ........
 

jem

новичок
Не "клиента", а "каждого клиента", коих могут быть сотни и тысячи. Я понимаю, админу проще пакеты выгнуть дугой, чем сделать то, что для программера гораздо проще, но смысл в сиих действах?
 
+
-
edit
 

Animal

новичок
Ну тут ты прав конечно .
Но блин, кто перешивать серв будет ? Ты или Я ?
Правельно !?
 

jem

новичок
Тут ты тоже прав. Не программер я. :)
 
+
-
edit
 

Animal

новичок
В теории можно попробывать вот таким фаером :
lan2net
У меня пока не получилось проверить .
Но он должен уметь перехватывать исходящие пакеты и направлять их в нужном направлении .

Напомню .
Это вроди как подходит для моего случая , т.е. переброс портов.
 

jem

новичок
Прикольное решение. Чтобы заставить линейку играть, надо клиенту ставить NAT с портмаппингом. Это ж какой компухтерной умищей должен обладать каждый юзер? :)
 
+
-
edit
 
Зато идиотов на сервере не будет :)
Пытаясь понять рекурсию, следи за тем, чтобы она не поняла тебя первой...  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru