Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Настройка проброса портов  (Прочитано 2519 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Настройка проброса портов
« : 21 Марта 2012, 03:27:07 »
Добрый день!
Долгое время бьюсь с пробросом портов но никак не могу добиться результата.
Имеется модем Yota WiMax с которого приходит интернет на сервер который является шлюзом, шлюз поднят на Ubuntu 10.04 и посредством объеденения нескольких интерфейсов в мост - раздает интернет на небольшую домашнюю сеть (Wi-Fi также присутствует) сеть работает без нареканий, торренты качают, веб серфится, онлайн игры играются, но есть проблема очень долго хочу поиграть в BF Bad Company 2 по мультиплееру. Год назад, до апгрейда сервера (завел Wi-Fi карточку и перешел на 10.04) работало все также отлично и BFBC2 в том числе.
Маршрутизация поднимается посредством iptables для этого имеется скрипт который исполняется при загрузке, я перечитал кучу статей о портфорвардинге испробовал множество вариантов правил, но ничего не помогает.
Я думаю проблема заключается в том что исходя из политик iptables порт не закрыт, но он и не используется пока какой либо сервис не попросит об этом, проверял я это nmap'ом. Т.е. открыты определенные порты на которых висят службы и пока торрент не запущен порт закрыт, как только торрент инициализирует закачку в nmap появляется порт которым пользуется торрент качалка, думаю идея ясна.
Я не уверен, но мне кажется игра просто не может инициализировать соединение на данном порту поэтому и появляются проблемы, то есть наверно вся проблема в iptables.
Забыл добавить- IP везде динамические, в домашней сети их раздает эта же машина посредством dnsmasq.
Посоветуйте пожалуйста в какую сторону рыть?

(Нажмите, чтобы показать/скрыть)

Оффлайн perimetral

  • Участник
  • *
  • Сообщений: 149
  • Dont worry, be happy!
    • Просмотр профиля
    • About Jax
Re: Настройка проброса портов
« Ответ #1 : 21 Марта 2012, 06:42:09 »
А в чем суть проблемки? Не работает игра, верно я понял? Если да, то, будьте добреньки, покажите, что она вам пишет (если не знаете, запустите из консоли), когда начинает не_работать. Если она не видит порт, в какой ей нужно, то или просто добавьте опен данного порта в автозапуск сервера или поменяйте конфиги игрули.

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #2 : 21 Марта 2012, 10:53:48 »
Игруля запускается на любой машине из домашней сети, но на винде и я не имею представления как в винде отследить момент на котором происходит ошибка. Суть в том что не работает мультиплеер, то бишь он находит сервера но при попытке подключиться к ним пишет что "соединение с сервером потеряно. проверьте наличие соединения с интернетом", такая же проблема происходит и в Battlefield Heroes (то есть схожие продукты одной компании), на форумах EA Games люди сталкивались с такими проблемами, и везде говорят что это связано именно с роутерами, обычно помогало включение DMZ Host, UPnP, NAT-PMP. То есть опять же проблема в портах, в моем скрипте в результате тестов накопилось уже порядком мусора, но там присутствуют все нужные для этих игр порты и все они ACCEPT, но ничего так и не работает...

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #3 : 21 Марта 2012, 13:03:59 »
Настройка проброса портов
<skip>
Посоветуйте пожалуйста в какую сторону рыть?

(Нажмите, чтобы показать/скрыть)
А где в этом скрипте проброс портов?
« Последнее редактирование: 21 Марта 2012, 13:13:54 от KT315 »
OpenWrt 19.07

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #4 : 21 Марта 2012, 13:37:43 »
(Нажмите, чтобы показать/скрыть)

как я предполагал, этот кусок кода и отвечает за проброс. Как же тогда его организовать?

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #5 : 21 Марта 2012, 13:54:35 »
Цепочками PREROUTING в таблице nat и действием DNAT
К примеру
Код: (bash) [Выделить]
iptables -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport $dport -j DNAT --to-destination $LAN_IP:$LAN_PORT
OpenWrt 19.07

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #6 : 21 Марта 2012, 14:54:51 »
у меня в локалке IP динамические, то есть я не могу со 100% уверенностью гарантировать на одной и той же машине IP постоянный адрес. Можно ли как то без явного указания, либо указать диапазон, например 10.0.0.1-10.0.0.100
и какой $LAN_PORT указывать, тот же что и $dport?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Настройка проброса портов
« Ответ #7 : 21 Марта 2012, 15:18:04 »
IP везде динамические, в домашней сети их раздает эта же машина посредством dnsmasq.
grep dhcp-host /etc/dnsmasq.conf

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #8 : 21 Марта 2012, 15:18:50 »
Ничто не мешает делать их статическими, привязав аренду адреса к MAC-адресу устройства на DHCP-сервере.
OpenWrt 19.07

Оффлайн perimetral

  • Участник
  • *
  • Сообщений: 149
  • Dont worry, be happy!
    • Просмотр профиля
    • About Jax
Re: Настройка проброса портов
« Ответ #9 : 21 Марта 2012, 15:53:40 »
И никто не подумал, что раз игра видит список серверов (а именно так автор и указал), то с портами все хорошо на стороне сервера и игра может орбащаться к интернету, как и он к ней. Стоп, или он к ней не может? Ну так тогда найтройте свой файрвол, а с портами все должно бblть хорошо.

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #10 : 21 Марта 2012, 18:42:20 »
Да все верно, список серверов успешно отображается, но тут не совсем понятно как именно клиент их ищет, может быть по 80 порту, проблема возникает не при поиске а именно при попытке войти на сервер, то есть возможно поиск и коннект осущевствляются разными способами. И я бы хотел прояснить, для работы шлюза используются hostapd, bridge-utils и скрипт который я привел в самом первом посте, то есть все сделано посредством iptables и никаких других скриптов для Firewall я не применяю.

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

arcfi,
Я не понял зачем эта команда?
grep dhcp-host /etc/dnsmasq.conf

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Настройка проброса портов
« Ответ #11 : 21 Марта 2012, 19:05:52 »
Я не понял зачем эта команда?
Это к вопросу о возможности проброса портов при выдаче адресов по dhcp.
Впрочем, необходимость данного мероприятия крайне сомнительна при отсутствии сервера на вашей стороне.

# iptables-saveГде?

Оффлайн zer66607

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Настройка проброса портов
« Ответ #12 : 21 Марта 2012, 19:14:29 »
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 21 Марта 2012, 22:50:55:
Всем спасибо!
Получилось путем привязки IP к игровой машине написании правил DNAT
Вот конфиг который заработал
Код: (Bash) [Выделить]
#! /bin/sh
#
#######################
# Настройка интерфейсов
#######################

# Internet (Поменяйте на ваш интернет-интерфейс)

Inet_Interface="wimax0"

# Lan (поменяйте на ваш интерфейс сетевого моста)

Lan_Interface="br0"

# Lo (локальный интефейс - петля)

Lo_Interface="lo"

# Описываем путь до iptables

IPT="/sbin/iptables"

# Номера непривилегированных портов
UNPRIPORTS="1024:65535"

# Очищаем текущие правила (если вдруг есть какие-то правила)

$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Задаем политики по умолчанию

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

# Установка стандартных политик в таблице nat.

$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

# Установка стандартных политик в таблице mangle.

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
 
# Создаем цепочку для обработки неправильных пакетов.
# bad_packets
 
$IPT -N bad_packets
 
$IPT -A bad_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A bad_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPT -A bad_packets -p tcp ! --syn -m state --state NEW -j DROP
 
# Создаем цепочку для обработки входящих (из интернета) tcp соединений.
# tcp_p

$IPT -N tcp_p
 
# Чтобы, например, разрешить подключаться к нашему шлюзу из интернета по ssh:

ssh="22"
ssh_ip_allowed="0/0"
ftp="21"
ftp_ip_allowed="0/0"

$IPT -A tcp_p -p tcp -s $ssh_ip_allowed --dport $ssh -j ACCEPT
$IPT -A tcp_p -p tcp -s $ftp_ip_allowed --dport $ftp -j ACCEPT

$IPT -A tcp_p -p tcp -s 0/0 -j ACCEPT
 
# Создаем цепочку для обработки входящих (из интернета) udp соединений.
# udp_p

$IPT -N udp_p
 
$IPT -A udp_p -p udp -s 0/0 -j ACCEPT

#########################################################################################
# PORTS

BF_PORT1="80"
BF_PORT2="13505"
BF_PORT3="18800"
BF_PORT4="18805"
BF_PORT5="53"
BF_PORT6="10000"
BF_PORT7="11000"
BF_PORT8="18805"
BF_PORT9="18270"
BF_PORT10="18275"
BF_PORT11="18061"
BF_PORT12="18065"
BF_PORT13="18051"
BF_PORT14="18055"

# TCP правила

$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT1 -j DNAT --to-destination 10.0.0.20:$BF_PORT1
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT2 -j DNAT --to-destination 10.0.0.20:$BF_PORT2
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT3 -j DNAT --to-destination 10.0.0.20:$BF_PORT3
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT4 -j DNAT --to-destination 10.0.0.20:$BF_PORT4
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT9 -j DNAT --to-destination 10.0.0.20:$BF_PORT9
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT10 -j DNAT --to-destination 10.0.0.20:$BF_PORT10
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT12 -j DNAT --to-destination 10.0.0.20:$BF_PORT11
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT13 -j DNAT --to-destination 10.0.0.20:$BF_PORT12
$IPT -t nat -A PREROUTING -i $Inet_Interface -p tcp -m tcp --dport $BF_PORT14 -j DNAT --to-destination 10.0.0.20:$BF_PORT13

# UDP порты

$IPT -t nat -A PREROUTING -i $Inet_Interface -p udp -m udp --dport $BF_PORT5 -j DNAT --to-destination 10.0.0.20:$BF_PORT5
$IPT -t nat -A PREROUTING -i $Inet_Interface -p udp -m udp --dport $BF_PORT6 -j DNAT --to-destination 10.0.0.20:$BF_PORT6
$IPT -t nat -A PREROUTING -i $Inet_Interface -p udp -m udp --dport $BF_PORT7 -j DNAT --to-destination 10.0.0.20:$BF_PORT7
$IPT -t nat -A PREROUTING -i $Inet_Interface -p udp -m udp --dport $BF_PORT8 -j DNAT --to-destination 10.0.0.20:$BF_PORT8

 # Создаем цепочку для обработки входящих (из интернета) icmp соединений.
# icmp_p

$IPT -N icmp_p
 
# Разрешаем "пинговать" наш шлюз из интернета:
 
$IPT -A icmp_p -p icmp -s 0/0 --icmp-type 8 -j ACCEPT
$IPT -A icmp_p -p icmp -s 0/0 --icmp-type 11 -j ACCEPT
 
$IPT -A icmp_p -p icmp -s 0/0 -j ACCEPT
 
# Цепочка INPUT
 
$IPT -A INPUT -p tcp -j bad_packets
 
$IPT -A INPUT -p all -i $Lan_Interface -j ACCEPT
$IPT -A INPUT -p all -i $Lo_Interface -j ACCEPT
 
$IPT -A INPUT -p all -i $Inet_Interface -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p all -i $Inet_Interface -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -i $Inet_Interface -j tcp_p
$IPT -A INPUT -p udp -i $Inet_Interface -j udp_p
$IPT -A INPUT -p icmp -i $Inet_Interface -j icmp_p
 
# Цепочка FORWARD
 
$IPT -A FORWARD -p tcp -j bad_packets
 
$IPT -A FORWARD -p all -i $Lan_Interface -j ACCEPT
$IPT -A FORWARD -p all -i $Lo_Interface -j ACCEPT
$IPT -A FORWARD -p all -i $Inet_Interface -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -i $Inet_Interface -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
 
# Цепочка OUTPUT
 
$IPT -A OUTPUT -p tcp -j bad_packets
 
$IPT -A OUTPUT -p all -o $Inet_Interface -j ACCEPT
$IPT -A OUTPUT -p all -o $Lan_Interface -j ACCEPT
$IPT -A OUTPUT -p all -o $Lo_Interface -j ACCEPT
 
# Цепочка POSTROUTING (таблица nat)
 
$IPT -t nat -A POSTROUTING -o $Inet_Interface -j MASQUERADE
 
# Включаем перенаправление ipv4.
 
$IPT -L

echo "1" > /proc/sys/net/ipv4/ip_forward
 
echo "Firewall started"
 
exit 0
« Последнее редактирование: 21 Марта 2012, 22:50:55 от zer66607 »

 

Страница сгенерирована за 0.025 секунд. Запросов: 22.