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

Исходное сообщение
"iptables warcraft 3 the frozen throne"

Отправлено awpe , 12-Май-10 19:09 
Доброго времени суток.

имею:

     сервер свич локальные машины

     внешка -> сервер -> свич -> локальные машины

/etc/iptables/iptables.rules:

*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination 192.168.0.2:6112
COMMIT
*filter
-A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i eth0 -j ACCEPT
-A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i eth0 -j ACCEPT
COMMIT

собственно вопрос как сделать так чтобы порт 6112 перенаправлялся из внешки в локальную сеть именно той машине с которой был запрос

суть в чём - локальная сеть в варкрафте работает нормально, а вот с bnet трабл - если убрать все правила по портам 6112-6119 тоесть оставить

*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
COMMIT
*filter
COMMIT

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

Если добавить правила

*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination 192.168.0.2:6112
COMMIT
*filter
-A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i eth0 -j ACCEPT
-A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i eth0 -j ACCEPT
COMMIT

то машина с ip 192.168.0.2 может хостить НО подцепится к ней могут только из внешки, остальные машины локальной сети игру видят но не могут после чтения man'а решил попоробовать так

*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination 192.168.0.0-192.168.0.199:6112
COMMIT
*filter
-A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i eth0 -j ACCEPT
-A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i eth0 -j ACCEPT
COMMIT

но в результате bnet вообще пропал, вопрос как сделать чтобы к созданой на локальной машине игре по bnet, могли цеплятся не только из внешки но и из локальной сети?


Содержание

Сообщения в этом обсуждении
"iptables warcraft 3 the frozen throne"
Отправлено reader , 12-Май-10 20:46 
>[оверквотинг удален]
>3128
> -A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination
>192.168.0.2:6112
> COMMIT
> *filter
> -A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i
>eth0 -j ACCEPT
> -A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i
>eth0 -j ACCEPT
> COMMIT

192.168.0.0 - это подсеть на eth0? сделайте и на нем SNAT для тех кто идет из 192.168.0.0 на эти порты

>[оверквотинг удален]
> *filter
> -A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i
>eth0 -j ACCEPT
> -A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i
>eth0 -j ACCEPT
> COMMIT
>
>но в результате bnet вообще пропал, вопрос как сделать чтобы к созданой
>на локальной машине игре по bnet, могли цеплятся не только из
>внешки но и из локальной сети?


"iptables warcraft 3 the frozen throne"
Отправлено reader , 12-Май-10 20:55 
конечно если из локалки цепляются через внешний адрес

"iptables warcraft 3 the frozen throne"
Отправлено awpe , 12-Май-10 22:31 
>конечно если из локалки цепляются через внешний адрес

тоесть ничего не получится?


"iptables warcraft 3 the frozen throne"
Отправлено awpe , 12-Май-10 22:29 
192.168.0.0 - это подсеть на eth0?  - да

сделайте и на нем SNAT для тех кто идет из 192.168.0.0 на эти порты

-A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source eth1 - так?


"iptables warcraft 3 the frozen throne"
Отправлено reader , 13-Май-10 00:01 
>192.168.0.0 - это подсеть на eth0?  - да
>
>сделайте и на нем SNAT для тех кто идет из 192.168.0.0 на
>эти порты
>
>-A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source eth1 - так?
>

-A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source eth0

и тут
-A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination 192.168.0.2:6112
убрать -i eth1, если клиент будет цепляться через внешний ip

кстати , а клиент с какого порта отправляет не с 6112?

если клиент из локалки (192.168.0.0/24) цепляется к игровому серверу который в локалке (192.168.0.2) по ip 192.168.0.2, то это соединение пойдет на прямую, а не через шлюз и если это не работает смотрите игровой сервер.

если клиент из локалки (192.168.0.0/24) цепляется к игровому серверу который в локалке (192.168.0.2), через внешний ip шлюза (его внутренний допустим 192.168.0.1 ), то без nat на внутреннем интерфейсе получится прохождение пакета

клиент > шлюз (192.168.0.1) > перенаправление на 192.168.0.2 > ответ клиенту на прямую, не через шлюз(клиенту это не нравится)

с nat на eth0 , ответ от 192.168.0.2 пойдет через шлюз


"iptables warcraft 3 the frozen throne"
Отправлено awpe , 13-Май-10 01:41 
*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 6112 -i eth1 -j DNAT --to-destination 192.168.0.2:6112
COMMIT
*filter
-A FORWARD -p tcp -m tcp -m multiport --dports 6112:6119,6500,6886 -i eth0 -j ACCEPT
-A FORWARD -p udp -m udp -m multiport --dports 6112:6119 -i eth0 -j ACCEPT
COMMIT

когда игра идёт по локальной сети то пакеты не доходят до шлюза на то она и локальная игра, они через свич видимо сразу проходят. Проблемы с battle.net потому что это внешний сервер, когда один создаёт игру то для подключения извне нужно чтобы пакеты с порта 6112 заворачивались на машину хоста в локальной сети :

192.168.0.2 - ip адрес хоста в локальной сети
на шлюз приходит пакет (порт 6112) шлюз меняет ip его назначения с внешнего ip шлюза на 192.168.0.2 (согласно приведённым выше правилам), но когда клиент из локальной сети с ip адресом 192.168.0.3 хочет подключится к хосту, то пакет с ответом на его запрос снова заворачивается на 192.168.0.2, вопрос собственно в том как сделать так чтобы порт 6112 заворачивался именно на тот ip с которого был запрос или так не возможно? может можно пакеты из локальной сети с каким нибудь флагом на сервер отправлять? или может сделать правило такое чтобы все внешние пакеты 6112 отправлялись не на конкретный адрес в локальной сети а на всю сеть (кому надо тот и примет).

Боюсь я фигню написал ибо слабо представляю как iptables определит кому предназначался пакет...

Значит остаётся только завернуть порт 6112 на внутрисеть и пусть там принимает тот кому надо....

Если у кого то есть идеи сжальтесь над новичком, напишите как будет конфиг выглядеть.


"iptables warcraft 3 the frozen throne"
Отправлено reader , 13-Май-10 10:55 
>[оверквотинг удален]
>когда игра идёт по локальной сети то пакеты не доходят до шлюза
>на то она и локальная игра, они через свич видимо сразу
>проходят. Проблемы с battle.net потому что это внешний сервер, когда один
>создаёт игру то для подключения извне нужно чтобы пакеты с порта
>6112 заворачивались на машину хоста в локальной сети :
>
>192.168.0.2 - ip адрес хоста в локальной сети
>на шлюз приходит пакет (порт 6112) шлюз меняет ip его назначения с
>внешнего ip шлюза на 192.168.0.2 (согласно приведённым выше правилам), но когда
>клиент из локальной сети с ip адресом 192.168.0.3 хочет подключится к

на какой ip он подключается , на внешний с последующим перенапровлением ( хотя из-за -i eth1 перенаправления не будет ) или сразу на 192.168.0.2

>хосту, то пакет с ответом на его запрос снова заворачивается на

с ответом от 192.168.0.2 ? если да то он не будет заворачиваться потому что как минимум у них будет -i eth0

>192.168.0.2, вопрос собственно в том как сделать так чтобы порт 6112
>заворачивался именно на тот ip с которого был запрос или так

не понятно сформулированно, обратное преобразование iptables делает сам

клиент с какого порта отравляет?

>[оверквотинг удален]
>а на всю сеть (кому надо тот и примет).
>
>Боюсь я фигню написал ибо слабо представляю как iptables определит кому предназначался
>пакет...
>
>Значит остаётся только завернуть порт 6112 на внутрисеть и пусть там принимает
>тот кому надо....
>
>Если у кого то есть идеи сжальтесь над новичком, напишите как будет
>конфиг выглядеть.


"iptables warcraft 3 the frozen throne"
Отправлено awpe , 14-Май-10 01:51 
в том то и дело что все пакеты battle.net идут через его сервер а не по кротчайшему пути чем была бы локальная сеть

клиент отправляет с 6112 да и принимает от туда, просто в моих правилах ip входящих по порту 6112 пакетов с внешнего ip сервера playground меняется на *.0.2 а ведь в локальной сети могут быть ещё машины которым надо

надо видиммо сделать так чтобы каждая машина имела доступ по всем портам в обе стороны во внешку


"iptables warcraft 3 the frozen throne"
Отправлено reader , 14-Май-10 11:23 
>[оверквотинг удален]
>сервер а не по кротчайшему пути чем была бы локальная сеть
>
>
>клиент отправляет с 6112 да и принимает от туда, просто в моих
>правилах ip входящих по порту 6112 пакетов с внешнего ip сервера
>playground меняется на *.0.2 а ведь в локальной сети могут быть
>ещё машины которым надо
>
>надо видиммо сделать так чтобы каждая машина имела доступ по всем портам
>в обе стороны во внешку

если сервер слушает 6112 и на него делается проброс с внешки, и клиент отравляет с 6112, и протокол они используют один и тот же, то по моему сделать то что вы хотите не получится.

смотрите можно ли у них менять порты.