Доброго времени суток.имею:
сервер свич локальные машины
внешка -> сервер -> свич -> локальные машины
/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, могли цеплятся не только из внешки но и из локальной сети?
>[оверквотинг удален]
>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
> COMMIT192.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, могли цеплятся не только из
>внешки но и из локальной сети?
конечно если из локалки цепляются через внешний адрес
>конечно если из локалки цепляются через внешний адрестоесть ничего не получится?
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 - так?
>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 пойдет через шлюз
*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 на внутрисеть и пусть там принимает тот кому надо....
Если у кого то есть идеи сжальтесь над новичком, напишите как будет конфиг выглядеть.
>[оверквотинг удален]
>когда игра идёт по локальной сети то пакеты не доходят до шлюза
>на то она и локальная игра, они через свич видимо сразу
>проходят. Проблемы с 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 на внутрисеть и пусть там принимает
>тот кому надо....
>
>Если у кого то есть идеи сжальтесь над новичком, напишите как будет
>конфиг выглядеть.
в том то и дело что все пакеты battle.net идут через его сервер а не по кротчайшему пути чем была бы локальная сетьклиент отправляет с 6112 да и принимает от туда, просто в моих правилах ip входящих по порту 6112 пакетов с внешнего ip сервера playground меняется на *.0.2 а ведь в локальной сети могут быть ещё машины которым надо
надо видиммо сделать так чтобы каждая машина имела доступ по всем портам в обе стороны во внешку
>[оверквотинг удален]
>сервер а не по кротчайшему пути чем была бы локальная сеть
>
>
>клиент отправляет с 6112 да и принимает от туда, просто в моих
>правилах ip входящих по порту 6112 пакетов с внешнего ip сервера
>playground меняется на *.0.2 а ведь в локальной сети могут быть
>ещё машины которым надо
>
>надо видиммо сделать так чтобы каждая машина имела доступ по всем портам
>в обе стороны во внешкуесли сервер слушает 6112 и на него делается проброс с внешки, и клиент отравляет с 6112, и протокол они используют один и тот же, то по моему сделать то что вы хотите не получится.
смотрите можно ли у них менять порты.