LinuxForum.Fans
Тема

Проброс портов на виртуалку + динамический ip и iptables

Автор: zenon 85 сообщений 20203 просмотров
#142947

Kettler, я уже даже debian stable поставил и на чистой системе без применения всяких своих привычных настроек \ скриптов и прочего пробовал тот вариант и фиг вам... :(

inettel написал:
OUTPUT... это интересно интересно
Случайно ни каких прозрачных прокси не настроенно ?

Чистоган полный. smile

Kettler написал:

И ещё не забываем включить forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

Ну не маленькие уже. smile

#142957

А скрипт точно после поднятия ppp0 выполняеться?

#142959

Такс. при всех чистых правилах iptables , после ввода

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -j SNAT --to-source внешнийIP

Виртуальная машина в инет ходить может ?

#142961
Kettler написал:
А скрипт точно после поднятия ppp0 выполняеться?

Абсолютно, у меня как бэ всегда после поднятия сетевых сразу ppp0 - т.е. при загрузке.

inettel написал:
Такс. при всех чистых правилах iptables , после ввода
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -j SNAT --to-source внешнийIP
Виртуальная машина в инет ходить может ?

В инет ходит после iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -j MASQUERADE

Вот сейчас как это выглядит:

Показать
text

# ************************************************************************************************** #
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
# ************************************************************************************************** #
export IPT="/sbin/iptables -v"
# export LAN=eth0 #
export P_PLAN=ppp0
export Z_PLAN=eth1
export V_PLAN=tap0
export V_COMP=192.168.1.2
export Z_COMP=192.168.0.5
# export REAL_IP=0.0.0.0
# ************************************************************************************************** #
# RESET
$IPT -P INPUT   ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT  ACCEPT
# reset the default policies in the nat table.
$IPT -t nat -P PREROUTING  ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT      ACCEPT
# reset the default policies in the mangle table.
$IPT -t mangle -P PREROUTING  ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -t mangle -P OUTPUT      ACCEPT
# flush all the rules in the filter and nat tables.
$IPT           -F
$IPT -t nat    -F
$IPT -t mangle -F
# erase all chains that's not default in filter and nat table.
$IPT           -X
$IPT -t nat    -X
$IPT -t mangle -X
# Let's go
$IPT -P INPUT   DROP
$IPT -P OUTPUT  DROP
$IPT -P FORWARD DROP
# ************************************************************************************************** #
# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT  -i lo     -j ACCEPT
$IPT -A INPUT  -i $Z_PLAN -j ACCEPT
$IPT -A INPUT  -i $V_PLAN -j ACCEPT
$IPT -A OUTPUT -o lo     -j ACCEPT
$IPT -A OUTPUT -o $Z_PLAN -j ACCEPT
$IPT -A OUTPUT -o $V_PLAN -j ACCEPT
# ************************************************************************************************** #
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим
# признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
$IPT -A INPUT              -m state --state RELATED,ESTABLISHED     -j ACCEPT
$IPT -A OUTPUT             -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -o $P_PLAN -m state --state RELATED,ESTABLISHED     -j ACCEPT
$IPT -A FORWARD -o $Z_PLAN -m state --state RELATED,ESTABLISHED     -j ACCEPT
$IPT -A FORWARD -o $V_PLAN -m state --state RELATED,ESTABLISHED     -j ACCEPT
$IPT -A FORWARD -i $Z_PLAN -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $V_PLAN -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# ************************************************************************************************** #
# Разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $Z_PLAN -o $P_PLAN -j ACCEPT
$IPT -A FORWARD -i $V_PLAN -o $P_PLAN -j ACCEPT
# Разрешаем обмен между сетями
$IPT -A FORWARD -i $Z_PLAN -o $V_PLAN -j ACCEPT
$IPT -A FORWARD -i $V_PLAN -o $Z_PLAN -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPT -A INPUT -p tcp --dport 6881:6889 -m state --state NEW -j ACCEPT
# ************************************************************************************************** #
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут
# иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный обмен данными
# становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $P_PLAN -o $Z_PLAN -j REJECT
$IPT -A FORWARD -i $P_PLAN -o $V_PLAN -j REJECT
# ************************************************************************************************** #
# Маскарадинг
$IPT -t nat -A POSTROUTING -o $P_PLAN -s $Z_COMP -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $P_PLAN -s $V_COMP -j MASQUERADE
# ************************************************************************************************** #

После этого выше приведенный скрипт.

#142963

Закоментируй как тест всё с REJECT и с DROP

#142964

А правила, которые я писал, вы добавляли при включенном

$IPT -t nat -A POSTROUTING -o $P_PLAN -s $Z_COMP -j MASQUERADE

?

кстати там ошибка в пятой строчке не указан номер tap

#142967

Такс, ну прям...
После установки чистой debian без всяких iptables, поднял tap0, запустил kvm, все с хоста на гостя и обратно пинг есть.
Применяю iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -j MASQUERADE
Шлюзом 192.168.1.1 для гостя, - dnsmasq - хотя пробовал и без только резолвил 8.8.8.8, все после этого на госте интернет есть.
На госте апач. Захожу на http//192.168.1.2 = апач.
Варианты:
iptables -t nat -A PREROUTING -i ppp0 -d внешнийIP -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -p tcp --sport 80 -j SNAT --to-source внешнийIP
На моем динамическом нет апача.

iptables -v -A INPUT -p tcp -i ppp0 --dport 80 -j ACCEPT
iptables -v -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
Нет апача.

И еще перебор из кучи всего чего можно и нельзя... предварительно очищая все правила и делая:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Нет апача.

Только:
iptables -v -t nat -A PREROUTING --dst внешний_ip -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
iptables -v -t nat -A POSTROUTING -p tcp --dst внешний_ip --dport 80 -j SNAT --to-source 192.168.1.2:80
iptables -v -t nat -A OUTPUT --dst внешний_ip -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
Все ОК.

inettel написал:
А правила, которые я писал, вы добавляли при включенном
$IPT -t nat -A POSTROUTING -o $P_PLAN -s $Z_COMP -j MASQUERADE
?

Да, при включенном.

inettel написал:
кстати там ошибка в пятой строчке не указан номер tap

Не вижу где, если не сложно ткни пальцем. :)

Kettler написал:
Закоментируй как тест всё с REJECT и с DROP

Ну это первым делом делаю, закрываю только когда работает.

#142976
inettel написал:
Менять ip при активном соединении ? очень сомневаюсь. Если бы ваш провайдер так делал - у него бы телефон раскалился от звонков с вопросами "А почему меня выбрасывает с webmoney? а почему у меня закачки с рапидшары рвутся ? за что мы платим деньги и т.п"

Понаблюдать надо за своим ip, вот кстати почему у например noip привязка обновления только ко времени т.е. каждые сколько-то там времени обновляет инфу, а не при поднятии сетевого интерфейса.
ы. http://gnu.su/news.php?extend.352 http://welinux.ru/post/4532/

#142988

Ищи где обрыв

При чистом iptables и всех политиках ACCEPT добавляеш

text

iptables -t nat -A PREROUTING -i ppp0 -d внешнийIP -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80

на виртуалке

text

tcpdump -i eth0 port 80
(или что там, вместо eth0)

из интернета пытаешся достучаться до ТвойВнешнийIP:80
например так

text

nmap твойIP -p 80

если тспдамп молчит, запусти его на реальной машине, на интерфейсе смотрящем в виртуалку (tap0 насколько я понял), потом на ppp0

если же тспдамп покажет входящие пакеты, то добавляй

text

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.2 -p tcp --sport 80 -j SNAT --to-source внешнийIP

и так же, по очереди, смотри, в каком месте пропадают исходящие пакеты

Очень смущает влияние цепочки OUTPUT на передаваемый трафик, смахивает на глюк KVM или неправильную настройку виртуальной сети

Насчет ошибки в скрипте - пост 38, пятая строчка скрипта

iptables -A FORWARD -i tap
должно быть
iptables -A FORWARD -i tap0

#143046

При чистых правилах:

text

iptables -A FORWARD -i ppp0 -o tap0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i tap0 -o ppp0 -p tcp --sport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80

(DNAT tcp opt -- in ppp0 out * 0.0.0.0/0 -> 188.233.124.239 tcp dpt:80 to:192.168.1.2:80)

tcpdump на виртуалке молчит, только при обращении напрямую (192.168.1.2.) оживает.

#143074

Сейчас попробовал так:
[console]
>>iptables -v -t nat -A OUTPUT -p tcp --dst 188.233.124.239 --dport 80 -j DNAT --to-destination 192.168.1.2:80
DNAT tcp opt -- in * out * 0.0.0.0/0 -> 188.233.124.239 tcp dpt:80 to:192.168.1.2:80
[/console]
Только одна эта строчка при чистых правилах, таки работает, пробросился гад.

#143100

Не может транзитный траффик попадать в цепочку OUTPUT
А раз это происходит - нужно ковырять насторойки виртуальной сети, сейчас по всем признакам получается, что траффик от tap0 считается идущим от локального процесса.

#143155

Ну не знаю уже куда рыть:
192.168.0.5 - реальный комп + apache.

Показать
text

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
export IPT="/sbin/iptables -v"
REAL_IP=`cat /tmp/ip_old`
VSERV_IP=192.168.0.5

$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 $IPT -t nat -P PREROUTING ACCEPT $IPT -t nat -P POSTROUTING ACCEPT $IPT -t nat -P OUTPUT ACCEPT $IPT -t mangle -P PREROUTING ACCEPT $IPT -t mangle -P POSTROUTING ACCEPT $IPT -t mangle -P OUTPUT ACCEPT

ip addr show ppp0 | grep "inet" | grep "peer" | awk '{print $2}' > /tmp/ip_old REAL_IP=`cat /tmp/ip_old`

$IPT -t nat -A PREROUTING -i ppp0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80

$IPT -L -n -t nat

Результат:

Показать
text

sh test1
Flushing chain `INPUT'
Flushing chain `FORWARD'
Flushing chain `OUTPUT'
Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'
Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `FORWARD'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'
DNAT  tcp opt -- in ppp0 out *  0.0.0.0/0  -> 188.233.124.239  tcp dpt:80 to:192.168.0.5:80 
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  ppp0   *       0.0.0.0/0            188.233.124.239     tcp dpt:80 to:192.168.0.5:80 

Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination

Вроде правила должны сработать, ан нет.
Сеть:

Показать
text

>>route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
dynamicip-88-87 *               255.255.255.255 UH    0      0        0 ppp0
192.168.1.0     *               255.255.255.0   U     0      0        0 tap0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
default         *               0.0.0.0         U     0      0        0 ppp0

>> ifconfig eth0 Link encap:Ethernet HWaddr 00:21:91:21:80:d5 inet6 addr: fe80::221:91ff:fe21:80d5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1795257 errors:0 dropped:0 overruns:0 frame:0 TX packets:2036375 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:629416503 (600.2 MiB) TX bytes:575296902 (548.6 MiB) Interrupt:20 Base address:0xcc00

eth1 Link encap:Ethernet HWaddr 00:25:22:69:60:62 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::225:22ff:fe69:6062/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:129884 errors:0 dropped:0 overruns:0 frame:0 TX packets:218182 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:9631592 (9.1 MiB) TX bytes:316903864 (302.2 MiB) Interrupt:42 Base address:0xe000

lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2832 errors:0 dropped:0 overruns:0 frame:0 TX packets:2832 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:447966 (437.4 KiB) TX bytes:447966 (437.4 KiB)

ppp0 Link encap:Point-to-Point Protocol inet addr:188.233.124.239 P-t-P:88.87.85.199 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 RX packets:1793333 errors:0 dropped:0 overruns:0 frame:0 TX packets:2034476 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:589847624 (562.5 MiB) TX bytes:530481131 (505.9 MiB)

tap0 Link encap:Ethernet HWaddr 26:4a:24:f7:6f:93 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::244a:24ff:fef7:6f93/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2034 errors:0 dropped:0 overruns:0 frame:0 TX packets:4817 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:151836 (148.2 KiB) TX bytes:4258189 (4.0 MiB)

#143163

А если апача на ppp0 повесить он виден ?

#143167

Локально apache ставлю, тот на который проброс - удаляю, виден локальный. (после последних правил)

ы.

text

>>nmap 188.233.124.239 -p 80
Starting Nmap 5.21 ( http://nmap.org ) at 2011-03-23 20:08 VOLT
Nmap scan report for 188.233.124.239
Host is up (0.000059s latency).
PORT   STATE  SERVICE
80/tcp closed http

меняю
$IPT -t nat -A PREROUTING -i ppp0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80
на
$IPT -t nat -A OUTPUT -p tcp --dst $REAL_IP --dport 80 -j DNAT --to-destination $VSERV_IP:80

text

>>nmap 188.233.124.239 -p 80
Starting Nmap 5.21 ( http://nmap.org ) at 2011-03-23 20:11 VOLT
Nmap scan report for 188.233.124.239
Host is up.
PORT   STATE    SERVICE
80/tcp filtered http
Nmap done: 1 IP address (1 host up) scanned in 2.07 seconds

пробовал строку
$IPT -t nat -A PREROUTING -i ppp0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80
менять на
$IPT -t nat -A PREROUTING -i eth0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80
$IPT -t nat -A PREROUTING -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80

==>80/tcp closed http

#143179

Я не когда не думал что такая проблема может быть с iptables

#143183

Не с iptables проблема, строчки

$IPT -t nat -A PREROUTING -i ppp0 -d $REAL_IP -p tcp --dport 80 -j DNAT --to-destination $VSERV_IP:80

достаточно, чтобы апач на реальной машине был виден из инета.
Кстати он и был виден. в течении минут этак 10.
Осталось понять, что было сделанно перед этим, и что после.

#143184

Kettler, а вот попробуй мои последние манипуляции, ...

#143186

inettel, не знаю менял много.
Вот сейчас применил:

text

>>iptables -v -t nat -A PREROUTING -i ppp0 -d 188.233.124.239 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
DNAT  tcp opt -- in ppp0 out *  0.0.0.0/0  -> 188.233.124.239  tcp dpt:80 to:192.168.1.2:80 
>>nmap 188.233.124.239 -p 80

Starting Nmap 5.21 ( http://nmap.org ) at 2011-03-23 20:41 VOLT Nmap scan report for 188.233.124.239 Host is up (0.000057s latency). PORT STATE SERVICE 80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

На хосте apache удалил сечас по идее должен видеть виртуалку с апачем.
Смотри.

#143188

открывается

Войдите или зарегистрируйтесь, чтобы ответить.