LINUX.ORG.RU
решено ФорумAdmin

kvm/какая сеть подойдет?

 ,


0

1

Вообщем, какую сеть выбрать, чтобы завернуть тсп траффик ВМ kvm через redsocks? В стандартном варианте если выбрана сеть NAT, не работает такая петрушка. Траффик приложений с хоста заворачиваются в сокс, с гостей пакеты доходят до виртуального свича и все на этом - SYN SENT. На хосте используется скрипт, для заворачивания траффика:

#!/bin/sh

IPTABLES="/sbin/iptables"
REDSOCKS="/usr/bin/redsocks"
REDSOCKSCFG="/home/user/.redsocks/redsocks.conf"
REDSOCKS_PORT="12345" #local_port in $REDSOCKSCFG
PDNSDCFG="/etc/pdnsd.conf"
SERVER="your_ssh_server"

if [ "$1" = "start" ]; then
        echo '(Re)starting redsocks...'
        pkill -U $USER redsocks 2>/dev/null
        sleep 1
        $REDSOCKS -c $REDSOCKSCFG
        echo '(Re)starting pdnsd'
        pkill -U $USER pdnsd 2>/dev/null
        pdnsd -d -mto -c $PDNSDCFG
        $IPTABLES -t nat -F
        $IPTABLES -t nat -X
        $IPTABLES -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353 #redirect dns queries


        $IPTABLES -t nat -D PREROUTING -p tcp -j REDSOCKS_FILTER 2>/dev/null
        $IPTABLES -t nat -D OUTPUT     -p tcp -j REDSOCKS_FILTER 2>/dev/null
        $IPTABLES -t nat -F REDSOCKS_FILTER 2>/dev/null
        $IPTABLES -t nat -X REDSOCKS_FILTER 2>/dev/null
        $IPTABLES -t nat -F REDSOCKS 2>/dev/null
        $IPTABLES -t nat -X REDSOCKS 2>/dev/null

# Create our own chain
        $IPTABLES -t nat -N REDSOCKS
        $IPTABLES -t nat -N REDSOCKS_FILTER

# Do not try to redirect local traffic
        $IPTABLES -t nat -I REDSOCKS_FILTER -o lo -j RETURN


# Do not redirect LAN traffic and some other reserved addresses. (blacklist option)
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 0.0.0.0/8 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 10.0.0.0/8 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 127.0.0.0/8 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 169.254.0.0/16 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 172.16.0.0/12 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 192.168.0.0/16 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 224.0.0.0/4 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d 240.0.0.0/4 -j RETURN
        $IPTABLES -t nat -A REDSOCKS_FILTER -d $SERVER -j RETURN 
        $IPTABLES -t nat -A REDSOCKS_FILTER -j REDSOCKS

# Redirect all traffic that gets to the end of our chain
        $IPTABLES -t nat -A REDSOCKS   -p tcp -j REDIRECT --to-port $REDSOCKS_PORT

## Filter all traffic from the own host
## BE CAREFULL HERE IF THE SOCKS-SERVER RUNS ON THIS MACHINE
        $IPTABLES -t nat -A OUTPUT     -p tcp -j REDSOCKS_FILTER

# Filter all traffic that is routed over this host
        $IPTABLES -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER

        echo IPtables reconfigured.
        exit 0;
elif [ "$1" = "stop" ]; then
        $IPTABLES -t nat -F
        $IPTABLES -t nat -X
        killall redsocks
        killall pdnsd
        exit 0;
else
        exit 1;
fi



В конфиге redsocks указываю слушать на всех интерфейсах, т.е. 0.0.0.0 12345
Вообщем может кто нить реализовывал такое с квм/qemu, на virtbox все работает в режиме нат без лишних телодвижений, но там нат какой то другой, пакеты при этом не попадают в цепочку FORWARD.

Ответ на: комментарий от ving2

NAT у libvirt добавляет правила в iptables, ваш же скрипт при start/stop очищает таблицу nat. Вообще говоря скрипт весьма корявый.

anc ★★★★★
()
Ответ на: комментарий от anc

Да я в курсе, что в скрипте имеется код который очищает правила. Конечно же он закомментирован был. Еще как я понял посмотрев на выхлоп tcpdump, не хватает такого правила:

-A PREROUTING -i virbr0 -d 192.168.128.0/24 -p udp -m udp --dport 53 -j REDIRECT --to-port 5353 #заворачивание днс запросов на порт который слушает кэш. днс



А чем плох скрипт? В сети гяляет такой вариант.
ving2
() автор топика
Ответ на: комментарий от ving2

А чем плох скрипт? В сети гяляет такой вариант.

Он тупо очищает правила в таблице nat, а если у меня там что-то другое было? Ну хорошо, очистили, а вот тогда нафига " $IPTABLES -t nat -D PREROUTING -p tcp -j REDSOCKS_FILTER 2>/dev/null" такое писать?
Далее вот эти последовательные -F -X нафига? Если уж удаляем то зачем перед этим чистить?

anc ★★★★★
()
Ответ на: комментарий от anc

Не знаю, на фига автор написал эти правила... Все равно вывод в дев нул идет. Для пользователя не заметно, срабатывает моментально=) Вообще наверно, чтоб удостовериться что все почищенно. Только из за этого скрипт показался убогим? Меня интересует вот какой вопрос, а что будет если будет сгенерирован исх. Udp пакет отличный от 53 порта. Пакет пойдет напрямую в сеть менуя прокси ?

ving2
() автор топика
Ответ на: комментарий от ving2

Меня интересует вот какой вопрос, а что будет если будет сгенерирован исх. Udp пакет отличный от 53 порта.

1. Кем, гостем или хостом?
2. Покажите полный выхлоп iptables-save тогда и подумаем

anc ★★★★★
()
Ответ на: комментарий от anc

Далее вот эти последовательные -F -X нафига?

Сколь я помню (могу ошибаться), iptables не даст удалить непустую цепочку.

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Сколь я помню (могу ошибаться), iptables не даст удалить непустую цепочку.

Точно, полностью моя вина, был не прав, даже забыл об этом. Прямо стыдно стало... ламерье...
Но роли в данном случае не играет выше уже было -t nat -F, -t nat -X

anc ★★★★★
()
Ответ на: комментарий от anc

-A PREROUTING -i virbr0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 7543
Зачем ограничения в виде --tcp-flags ?
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
Единственное правило на OUTPUT с ACCEPT у virbr0
Пока наверное все что распарсил, могут быть ошибки :)

anc ★★★★★
()
Ответ на: комментарий от anc

anc спасибо большое=) завелось.

добавил вообщем так:

-t nat -I PREROUTING -i virbr0 -p udp -m udp --dport 53 -j REDIRECT --to-port 5353
-t nat -I PREROUTING -i virbr0 -p tcp -m tcp -j REDIRECT --to-port 7543 
-I OUTPUT -o virbr0 -d 10.10.10.0/24 -p udp -m udp --sport 5353 -j ACCEPT
-I OUTPUT -o virbr0 -d 10.10.10.0/24 -p udp -m udp --sport 7543 -j ACCEPT 
Ну и для INPUT по портам 5353 7543 

Теперь можно вернуться к вопросу выше, по части остального удп траффика. Только вот где фильтровать его не понимаю. Для гостя в цепочке forward, да и с хостовым тоже не ясно? Вообщем послушал бы совет на этот счет.
И почему у меня получется текст редактируется весь как "code" добавляю только правила в тег 
ving2
() автор топика
Ответ на: комментарий от ving2

Опять там опечатка -p udp -m udp --sport 7543 -j ACCEPT

Не могу отредактировать.

ving2
() автор топика
Ответ на: комментарий от ving2

Теперь можно вернуться к вопросу выше, по части остального удп траффика. Только вот где фильтровать его не понимаю. Для гостя в цепочке forward, да и с хостовым тоже не ясно? Вообщем послушал бы совет на этот счет.

Вы об этом: «Udp пакет отличный от 53 порта. Пакет пойдет напрямую в сеть менуя прокси» ? Тогда вопрос: что есть «сеть»? У вас маскарадится на tun0, это правильно или нет я не знаю.

anc ★★★★★
()
Ответ на: комментарий от ving2

И почему у меня получется текст редактируется весь как «code» добавляю только правила в тег

Не знаю, явно что-то не так делаете :) Но лучше так чем, простыня без code... :) Вообще кнопочка Предпросмотр есть

Не могу отредактировать.

Флудим до первой звезды, потом можно :)

anc ★★★★★
()
Ответ на: комментарий от anc

Тогда вопрос: что есть «сеть»? У вас маскарадится на tun0, это правильно или нет я не знаю.

Ага об этом. Да маскарадинг на tun интерфейс. Да это правильно, можно и поставить на любой физический интерфейс, а можно и на конкретный физич. Значит для гостя нужно в цепочке forward ограничить передачу пакетов по удп, оставить только udp по 53? А для хоста в output шаманить, по такому же принципу. Или все это лишнее ? Если поставить тему решеной, в ней можно будет отвечать? Основной вопрос уже закрылся, так что можно пометить что решена.

ving2
() автор топика
Ответ на: комментарий от anc

Не знаю, явно что-то не так делаете :)

Да у меня проблемы с этим никак не могу воткнуть, как процитировать здесь=) Вставляю этот знак '>' в начале текста и нифига.

ving2
() автор топика

Значит для гостя нужно в цепочке forward ограничить передачу пакетов по удп, оставить только udp по 53?

Да, все верно.

А для хоста в output шаманить, по такому же принципу.

Угу

Если поставить тему решеной, в ней можно будет отвечать?

Да.

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

Ну так помечайте :)

anc ★★★★★
()
Ответ на: Не знаю, явно что-то не так делаете :) от ving2
>Да у меня проблемы с этим никак не могу воткнуть, как процитировать здесь=) Вставляю этот знак '>' в начале текста и нифига.


Да у меня проблемы с этим никак не могу воткнуть, как процитировать здесь=) Вставляю этот знак '>' в начале текста и нифига.

Как видите работает.

anc ★★★★★
()
Ответ на: комментарий от anc

Как видите работает.

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

ving2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.