Добрый день!
Долгое время бьюсь с пробросом портов но никак не могу добиться результата.
Имеется модем Yota WiMax с которого приходит интернет на сервер который является шлюзом, шлюз поднят на Ubuntu 10.04 и посредством объеденения нескольких интерфейсов в мост - раздает интернет на небольшую домашнюю сеть (Wi-Fi также присутствует) сеть работает без нареканий, торренты качают, веб серфится, онлайн игры играются, но есть проблема очень долго хочу поиграть в BF Bad Company 2 по мультиплееру. Год назад, до апгрейда сервера (завел Wi-Fi карточку и перешел на 10.04) работало все также отлично и BFBC2 в том числе.
Маршрутизация поднимается посредством iptables для этого имеется скрипт который исполняется при загрузке, я перечитал кучу статей о портфорвардинге испробовал множество вариантов правил, но ничего не помогает.
Я думаю проблема заключается в том что исходя из политик iptables порт не закрыт, но он и не используется пока какой либо сервис не попросит об этом, проверял я это nmap'ом. Т.е. открыты определенные порты на которых висят службы и пока торрент не запущен порт закрыт, как только торрент инициализирует закачку в nmap появляется порт которым пользуется торрент качалка, думаю идея ясна.
Я не уверен, но мне кажется игра просто не может инициализировать соединение на данном порту поэтому и появляются проблемы, то есть наверно вся проблема в iptables.
Забыл добавить- IP везде динамические, в домашней сети их раздает эта же машина посредством dnsmasq.
Посоветуйте пожалуйста в какую сторону рыть?
#! /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
###########################################################################
#
# 2. Module loading.
#
#
# Needed to initially load modules
#
#/sbin/depmod -a
#
# 2.1 Required modules
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# 2.2 Non-Required modules
#
/sbin/modprobe ipt_owner
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
###########################################################################
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
#
echo "1" > /proc/sys/net/ipv4/ip_forward
# .
#
# 3.2 Non-Required proc configuration
#
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# -- , , , .
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# .
#echo "128" > /proc/sys/net/ipv4/ip_default_ttl
# TTL
# , , .
###########################################################################
$IPT -N allowed
$IPT -N tcp_packets
$IPT -N udp_packets
$IPT -N icmp_packets
# .
# 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
# :
iptv="5000"
$IPT -A OUTPUT -p tcp -m tcp -o $Inet_Interface --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -P tcp -m tcp -i $Inet_Interface --dport $UNPRIPORTS --sport $UNPRIPORTS -j ACCEPT ! --syn
#$IPT -A tcp_p -p tcp -s $ssh_ip_allowed --dport -j ACCEPT
#$IPT -A OUTPUT -p tcp --dport 6881 -j ACCEPT
# , , ssh:
ssh="22"
ssh_ip_allowed="0/0"
ftp="21"
ftp_ip_allowed="0/0"
bit="6881"
$IPT -A tcp_p -p tcp -s $ssh_ip_allowed --dport $bit -j ACCEPT
$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 -A tcp_packets -p TCP --dport $BF_PORT9 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT10 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT11 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT12 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT13 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT14 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT1 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT2 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT3 -j allowed
$IPT -A tcp_packets -p TCP --dport $BF_PORT4 -j allowed
# TCP.
#
# UDP
#
$IPT -A udp_packets -p UDP --destination-port $BF_PORT5 -j ACCEPT
$IPT -A udp_packets -p UDP --destination-port $BF_PORT6 -j ACCEPT
$IPT -A udp_packets -p UDP --destination-port $BF_PORT7 -j ACCEPT
$IPT -A udp_packets -p UDP --destination-port $BF_PORT8 -j ACCEPT
# ( ) 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.
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Firewall started"
exit 0