вобщем имеется локалка 192.168.1.1 шлюз (eth0-a.a.a.a - провайдер eth1-192.168.1.1 в качестве фаирвола iptables) в локалке на 192.168.1.2 поднят IRC server. Задача - с определенного адреса в интернете (b.b.b.b) попасть на IRCу.
в iptables имеем:
Chain PREROUTING (policy ACCEPT)
target prot opt in out source destination
DNAT tcp -- * * 0.0.0.0/0 a.a.a.a tcp dpt:6667 to:192.168.1.2:6667
(поидее все пакеты приходящие на a.a.a.a на 6667 порт должны перенаправиться на 192.168.1.2 на порт 6667)
в Chain FORWARD (policy DROP)
target prot opt in out source destination
ACCEPT all -- eth1 * 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 3 LOG flags 0 level 7 prefix `IPT FORWARD packet died: 'при коннекте мирки с b.b.b.b на шлюзе по tcpdump -i eth0 port 6667 вижу:
12:48:57.502121 b.b.b.b.45550 > a.a.a.a.ircd: S 5437808:5437808(0) win 8192 <mss 1422,nop,nop,sackOK>
самже мирка пишет "Невозможно подключиться к серверу (Соединение прервано по тайм-ауту)"
Где у меня неправильно?
С пробросом на 80 порт - аналогичная ситуация :(
И SNAT надо прописывать с этих портов в нужные IP
>И SNAT надо прописывать с этих портов в нужные IP
пробовал:
iptables -t nat -D POSTROUTING -s b.b.b.b -o eth1 -j SNAT --to-source 192.168.1.1
iptables -t nat -D POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to-source a.a.a.a
непомогло :( или я неправильно тебя понял
примерно так:
# Port Forwarding is enabled, so accept forwarded traffic
$IPT -A FORWARD -p udp -i $INET_IFACE --destination-port 6667:6669 \
--destination 192.168.1.2 -j ACCEPT$IPT -A FORWARD -p tcp -i $INET_IFACE --destination-port 6667:6669 \
--destination 192.168.1.2 -j ACCEPT
# Port Forwarding
$IPT -t nat -A PREROUTING -p udp -i $INET_IFACE --destination-port 6667:6669 \
-j DNAT --to-destination 192.168.1.2$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 6667:6669 \
-j DNAT --to-destination 192.168.1.2$IPT -t nat -A PREROUTING -p udp -i $LOCAL_IFACE --destination-port 6667:6669 \
--destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2$IPT -t nat -A PREROUTING -p tcp -i $LOCAL_IFACE --destination-port 6667:6669 \
--destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2возможно придется нарисовать еще правила для ident запросов irc сервера, то есть открыть ident port 113
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT
>примерно так:
># Port Forwarding is enabled, so accept forwarded traffic
>$IPT -A FORWARD -p udp -i $INET_IFACE --destination-port 6667:6669 \
> --destination 192.168.1.2 -j ACCEPT
>
>$IPT -A FORWARD -p tcp -i $INET_IFACE --destination-port 6667:6669 \
> --destination 192.168.1.2 -j ACCEPT
># Port Forwarding
>$IPT -t nat -A PREROUTING -p udp -i $INET_IFACE --destination-port 6667:6669 \
>
> -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 6667:6669 \
>
> -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p udp -i $LOCAL_IFACE --destination-port 6667:6669 \
>
> --destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p tcp -i $LOCAL_IFACE --destination-port 6667:6669 \
>
> --destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2
>
>возможно придется нарисовать еще правила для ident запросов irc сервера, то есть
>открыть ident port 113
>$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT
>$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT
>
>
таже фигня :( Невозможно подключиться к серверу (Соединение прервано по тайм-ауту)
вот все что у меня делается:
может я чето напортачил :(
#! /bin/sh
INET_IP="a.a.a.a"
INET_IFACE="eth0"
INET_BROADCAST="a.a.a.255"
LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_IFACE="eth1"
LO_IFACE="lo"
LO_IP="127.0.0.1"
VPN_LAN="193.168.3.0/24"
IPTABLES="/sbin/iptables"
/sbin/depmod -a
/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
/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
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
# bad_tcp_packets chain
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
# allowed chain
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
# TCP rules
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 443 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 1723 -j allowed
# UDP ports
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 123 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 2074 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST --destination-port 135:139 -j DROP# ICMP rules
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#
# Bad TCP packets we don't want.
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# Rules for special networks not part of the Internet
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT# Rules for incoming packets from the internet.
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $LAN_IFACE -d 224.0.0.0/8 -j DROP# Log weird packets that don't match the above.
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
iptables -A FORWARD -s $VPN_LAN -j ACCEPT
iptables -A FORWARD -d $VPN_LAN -m state --state ESTABLISHED,RELATED -j ACCEPT$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
## Пропуск в инет после авторизации на VPN и получении своего IP ##
## Вкл/Выкл считалкой ##
$IPTABLES -t nat -A POSTROUTING -s 192.168.3.10 -o $INET_IFACE -j SNAT --to-source $INET_IP
Мне кажется ipmanyak прав, буду побовать делать так как он ниже указал. Если у меня получится напишу.
># Port Forwarding is enabled, so accept forwarded traffic
>$IPT -A FORWARD -p udp -i $INET_IFACE --destination-port 6667:6669 \
> --destination 192.168.1.2 -j ACCEPT
>$IPT -A FORWARD -p tcp -i $INET_IFACE --destination-port 6667:6669 \
> --destination 192.168.1.2 -j ACCEPT
># Port Forwarding
>$IPT -t nat -A PREROUTING -p udp -i $INET_IFACE --destination-port 6667:6669 \
>
> -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port 6667:6669 \
>
> -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p udp -i $LOCAL_IFACE --destination-port 6667:6669 \
>
> --destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2
>
>$IPT -t nat -A PREROUTING -p tcp -i $LOCAL_IFACE --destination-port 6667:6669 \
>
> --destination $INET_ADDRESS -j DNAT --to-destination 192.168.1.2
>
>возможно придется нарисовать еще правила для ident запросов irc сервера, то есть
>открыть ident port 113
>$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT
>$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT
>
>
>Мне кажется ipmanyak прав, буду побовать делать так как он ниже
>указал. Если у меня получится напишу.
Мне тоже кажется что ipmanyak прав, я просто переживаю из-за S в 12:48:57.502121 b.b.b.b.45550 > a.a.a.a.ircd: S 5437808:5437808(0) win 8192 <mss 1422,nop,nop,sackOK>
Явно у меня что-то нетак в правилах, а вот что - немогу сообразить
Ты знаешь надо еще разрешить доступ с инета в цепочке INPUT на порт мирка. А далее как писал ipmanyak. Извини сейчас ухожу. Завтра напишу как у меня все получилось.
>Ты знаешь надо еще разрешить доступ с инета в цепочке INPUT
>на порт мирка. А далее как писал ipmanyak. Извини сейчас ухожу.
>Завтра напишу как у меня все получилось.Доступ к порту разрешен :(
Уже наступило "Завтра", може как освободишся напишеш как у тебя?
>С пробросом на 80 порт - аналогичная ситуация :(
># input
iptables -t nat -I PREROUTING -i $EXT_IF -p tcp -d $EXT_IP --dport 80
-j DNAT --to-destination 192.168.1.2iptables -I FORWARD -i $EXT_IF -p tcp -d 192.168.1.2 --dport 80 -j ACCEPT
#output
iptables -I FORWARD -o $EXT_IF -p tcp -s 192.168.1.2 --sport 80 -j ACCEPTiptables -t nat -I POSTROUTING -o $EXT_IF -p tcp -s 192.168.1.2 --sport 80 -j SNAT --to-source $EXT_IP
вроде так.
iptables -t nat -vnL
iptables -vnL
смотри счетчики
s/ 80/ 6667/g
#USER chain$IPT -A udp_inbound -p UDP -s 0/0 --destination-port "port namber" -j ACCEPT
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port "port number" -j ACCEPT#PREROUTING chain
$IPT -t nat -A PREROUTING -p udp -i $INET_IFACE --destination-port "portnumber" \
-j DNAT --to-destination "IPaddress:port"
$IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --destination-port "portnumber" \
-j DNAT --to-destination "IPaddress:port"
gde IPT="/path/iptables"
INET_IFACE="eth(n)"
udachi
крыша начинает медлено съезжать :(
перепробовал все предложенные варианты - результат - прервано по тайм-ауту
удалил в iptables-ax все правила и цепочки оставил - минимум для клиентов:
#iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.3.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 192.168.3.0/24 state RELATED,ESTABLISHEDChain OUTPUT (policy ACCEPT)
target prot opt source destination#iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 a.a.a.a tcp dpt:6667 to:192.168.1.2:6667
DNAT tcp -- 0.0.0.0/0 a.a.a.a tcp dpt:88 to:192.168.1.2:80Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.3.10 0.0.0.0/0 to:a.a.a.aChain OUTPUT (policy ACCEPT)
target prot opt source destinationи что Вы думаете - везде ACCEPT - а внутрь немогу попасть :(
Может ли мой пров каклибо препятсвовать мне? - я уже просто незнаю на что грешить :(
>#iptables -nL -t nat
>Chain PREROUTING (policy ACCEPT)
>target prot opt source
> destination
>
>DNAT tcp -- 0.0.0.0/0
>a.a.a.a tcp dpt:6667 to:192.168.1.2:6667
>DNAT tcp -- 0.0.0.0/0
>a.a.a.a tcp dpt:88 to:192.168.1.2:80
>
>Chain POSTROUTING (policy ACCEPT)
>target prot opt source
> destination
>SNAT all -- 192.168.3.10
> 0.0.0.0/0
> to:a.a.a.a
>ты определись или 192.168.1.2 или 192.168.3.10
>ты определись или 192.168.1.2 или 192.168.3.10
Ты плохо смотрел посты сверху 192.168.1.0 - внутренняя сетка на 192.168.1.2 поднят IRC сервер - вот к нему мне и нужно попасть, а адреса из 192.168.3.0 - это адреса которые раздает VPN сервер (пользователи ходят в инет только после авторизации на нем + если есть деньги на балансе, если деньги кончаються то билинг удаляет правило для этого клиента из цепочки POSTROUTING.
>>ты определись или 192.168.1.2 или 192.168.3.10
>Ты плохо смотрел посты сверху 192.168.1.0 - внутренняя сетка на 192.168.1.2 поднят
>IRC сервер - вот к нему мне и нужно попасть, а
>адреса из 192.168.3.0 - это адреса которые раздает VPN сервер (пользователи
>ходят в инет только после авторизации на нем + если есть
>деньги на балансе, если деньги кончаються то билинг удаляет правило для
>этого клиента из цепочки POSTROUTING.input:
bb.bb.bb.bb:port ->ext_ip:6667->(dnat)192.168.1.2:6667
src=bb.bb.bb.bb:port dst=192.168.1.2:6667
optput:
192.168.1.2:6667 -> bb.bb.bb.bb:port kak без SNAT? через кaкой gw
??
чтобы bb.bb.bb.bb получил src=ext_ip:6667 dst=bb.bb.bb.bb:port
>Chain POSTROUTING (policy ACCEPT)
>target prot opt source destination
>SNAT all -- 192.168.3.10 0.0.0.0/0 to:a.a.a.a
на 192.168.1.2 дай
traceroute -s 192.168.1.2 bb.bb.bb.bb
>input:
>bb.bb.bb.bb:port ->ext_ip:6667->(dnat)192.168.1.2:6667
>src=bb.bb.bb.bb:port dst=192.168.1.2:6667
>optput:
>192.168.1.2:6667 -> bb.bb.bb.bb:port kak без SNAT? через кaкой gw
>??
>чтобы bb.bb.bb.bb получил src=ext_ip:6667 dst=bb.bb.bb.bb:port
>>Chain POSTROUTING (policy ACCEPT)
>>target prot opt source destination
>>SNAT all -- 192.168.3.10 0.0.0.0/0 to:a.a.a.a
Честно - ничего непонял :(
>на 192.168.1.2 дай
>traceroute -s 192.168.1.2 bb.bb.bb.bb
traceroute to b.b.b.b (b.b.b.b) from 192.168.1.2, 30 hops max, 38 byte packets
1 192.168.1.2 2999.470 ms !H 2998.736 ms !H 2999.480 ms !HНасколько я понимаю (понимал) с b.b.b.b пакеты нормально долетали до 192.168.1.2 а вот обратно тишина, поидее машина котороая выполнила DNAT и переправила входящий пакет на 192.168.1.2 должна и ответ отправить на b.b.b.b и SNAT тут непричем
>>traceroute -s 192.168.1.2 bb.bb.bb.bb
>traceroute to b.b.b.b (b.b.b.b) from 192.168.1.2, 30 hops max, 38 byte packets
>
>1 192.168.1.2 2999.470 ms !H 2998.736 ms !H 2999.480 ms
>!H
192.168.1.2 без GATEWAY !!!!
>
>Насколько я понимаю (понимал) с b.b.b.b пакеты нормально долетали до 192.168.1.2 а
>вот обратно тишина,
да
> поидее машина котороая выполнила DNAT и переправила входящий
>пакет на 192.168.1.2 должна и ответ отправить на b.b.b.b
нет
192.168.1.2 должна ответ отправить на b.b.b.b
>и SNAT тут непричем
причемлибо делай routing и SNAT from 192.168.1.2
либо
iptables -t nat -I POSTROUTING -o $internal_if -p tcp -d 192.168.1.2 --dport 6667 -j SNAT --to-source 192.168.1.1
izvrat
>>>traceroute -s 192.168.1.2 bb.bb.bb.bb
>>traceroute to b.b.b.b (b.b.b.b) from 192.168.1.2, 30 hops max, 38 byte packets
>>
>>1 192.168.1.2 2999.470 ms !H 2998.736 ms !H 2999.480 ms
>>!H
>192.168.1.2 без GATEWAY !!!!
Т.е. собака зарылась в настройках сети на 192.168.1.2 ? (буду разбираться)
>>
>>Насколько я понимаю (понимал) с b.b.b.b пакеты нормально долетали до 192.168.1.2 а
>>вот обратно тишина,
>да
>> поидее машина котороая выполнила DNAT и переправила входящий
>>пакет на 192.168.1.2 должна и ответ отправить на b.b.b.b
>нет
>192.168.1.2 должна ответ отправить на b.b.b.b
чуть-чуть непонял, но догадываюсь (даже если нет прямых правил допускающих хождение пакетов с 192.168.1.2 в интернет шлюз пропускает с нее ответ на запрос из вне, и этот ответ непопадает в фильтрацию [вроде так])
>>и SNAT тут непричем
>причем
>либо делай routing и SNAT from 192.168.1.2
>либо
>iptables -t nat -I POSTROUTING -o $internal_if -p tcp -d 192.168.1.2 --dport
>6667 -j SNAT --to-source 192.168.1.1
>izvrat
Дествительно последняя строчка помогла (сенкс огромный) но почему изврат?
действительно изврат - я невижу своего реального ip (с которого зашел на IRC) хотя при таком раскладе это понятно,
Всеравно большое спасибо, доберусь до 1.2 разберусь со шлюзом
Итак (добрался я до 192.168.1.2 - действительно там небіл указан шлюз)
подводим итоги:
1. Если на машине на которую нам нужно попасть извне в качестве шлюза указан адрес гейта то достаточно любого правила с использованием DNAT из привиденных выше
2. Если шлюз не указан или указан неправильно, то к правилам DNAT необходимо, спасибо nrvalex, добавить парвило SNAT.
Все это приминимо к любым портам :)
Еще раз всем ответившим спасибо