Писал на другом форуме :
Мой 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
ЗЫЫ Сорь за типа флуд. Но я надеюсь комунить разъяснит ситуацию.
А вот это писал тута , но все что то поморозились :