Later Ctrl + ↑

Маршрутизация через несколько каналов/провайдеров.

http://www.opennet.ru/docs/RUS/LARTC/x348.html#SPLITACCESS

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

________
+----------+ /
| | |
+-----------
+ Провайдер 1+-----
__ | | | /
___/ \_ +----
+-----+ +----------+ |
_/ \__ | if1 | /
/ \ | Linux | |
| Локальная сеть---+ маршрутизатор| | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +----
+-----+ +----------+ |
| | | \
+-----------+ Провайдер 2+-----
| | |
+--------+ \________




В этом случае обычно возникает два вопроса.

4.2.1. Раздельный доступ

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

Давайте определим некоторые переменные. Пусть $IF1 будет именем первого интерфейса (if1 на рисунке), а $IF2 -- именем второго. Тогда $IP1 будет IP адресом $IF1 , а $IP2 -- IP адресом $IF2 . Далее, $P1 это IP-адрес шлюза провайдера 1, а $P2 -- IP адрес шлюза провайдера 2. Наконец, $P1_NET это IP сеть, к которой принадлежит $P1 , а $P2_NET -- сеть, к которой принадлежит $P2 .

Создадим две дополнительные таблицы маршрутизации, скажем T1 и T2. Добавим их в файл /etc/iproute2/rt_tables. Теперь можно настроить эти таблицы следующими командами:

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2


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

Теперь нужно настроить главную таблицу маршрутизации. Хорошо бы маршрутизировать пакеты для сетей провайдеров через соответствующие интерфейсы. Обратите внимание на аргумент `src’, который обеспечивает правильный выбор исходного IP-адреса.

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2


Теперь задаем маршрут по умолчанию:

ip route add default via $P1


Зададим правила маршрутизации. Они будут отвечать за то, какая таблица будет использоваться при маршрутизации. Вы хотите, чтобы пакет с определенным адресом источника маршрутизировался через соответствующий интерфейс:

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2


Этот набор команд обеспечивает маршрутизацию ответов через интерфейс, на котором был получен запрос.

Внимание!

Заметка читателя Рода Роака (Rod Roark): ’ если $P0_NET это локальная сеть, а $IF0 -- соответствующий ей интерфейс, желательно задать следующие команды:

ip route add $P0_NET dev $IF0 table T1
ip route add $P2_NET dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add $P0_NET dev $IF0 table T2
ip route add $P1_NET dev $IF1 table T2
ip route add 127.0.0.0/8 dev lo table T2


Итак, мы рассмотрели очень простой пример. Он будет работать для всех процессов, выполняющихся на маршрутизаторе и для локальной сети, если настроено преобразование адресов (NAT/masquerading). В противном случае, вам будет необходим диапазон IP адресов обоих провайдеров, или выполнять маскирование для одного из провайдеров. В любом случае, вы можете задать правила выбора провайдера для каждого конкретного адреса вашей локальной сети.

4.2.2. Распределение нагрузки.

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

Вместо выбора одного из провайдеров в качестве маршрута по-умолчанию, вы настраиваете т.н. многолучевой (multipath) маршрут. В стандартном ядре это обеспечит балансировку нагрузки между двумя провайдерами. Делается это следующим образом (повторюсь, мы основываемся на примере из раздела Раздельный доступ):

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1


Результатом команды будет попеременный выбор маршрута по-умолчанию. Вы можете изменить параметр weight, так чтобы один из провайдеров получал большую нагрузку.

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

Если вы действительно интересуетесь этим, вам стоит посмотреть на патчи Юлиана Анастасова (Julian Anastasov), расположеные по адресу http://www.ssi.bg/~ja/#routes. Они могут вам помочь.
2012   linux

Настройка маршрутизации в Ubuntu Linux, для начинающих

Оригинал: http://forum.ubuntu.ru/index.php?topic=12454.

Правила маршрутизации определяют, куда отправлять IP-пакеты. Данные
маршрутизации хранятся в одной из таблиц ядра. Вести таблицы
маршрутизации можно статически или динамически. Статический маршрут --
это маршрут, который задается явно с помощью команды route.
Динамическая маршрутизация выполняется процессом-демоном (routed или
gated), который ведет и модифицирует таблицу маршрутизации на основе
сообщений от других компьютеров сети. Для выполнения динамической
маршрутизации разработаны специальные протоколы: RIP, OSPF, IGRP, EGP,
BGP и т. д.

Динамическая маршрутизация необходима в том случае, если у вас
сложная, постоянно меняющаяся структура сети и одна и та же машина
может быть доступна по различным интерфейсам (например, через разные
Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно
не меняются, даже если используется динамическая маршрутизация.
Для персонального компьютера, подключаемого к локальной сети, в
большинстве ситуаций бывает достаточно статической маршрутизации
командой route. Прежде чем пытаться настраивать маршруты, просмотрите
таблицу маршрутизации ядра с помощью команды netstat -n -r. Вы должны
увидеть что-то вроде следующего

rigon@ubuntu-comp:~$ netstat -n -r

Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0 eth1


Если таблица пуста, то вы увидите только заголовки столбцов. Тогда
надо использовать route. С помощью команды route можно добавить или
удалить один (за один раз) статический маршрут. Вот ее формат:

route -f операция -тип адресат шлюз интерфейс


Здесь аргумент операция может принимать одно из двух значений: add
(маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат
может быть IP-адресом машины, IP-адресом сети или ключевым словом
default . Аргумент шлюз -- это IP-адрес компьютера, на который
следует пересылать пакет (этот компьютер должен иметь прямую связь с
вашим компьютером). Команда

route -f


удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип
принимает значения net или host . В первом случае в поле адресата
указывается адрес сети, а во втором -- адрес конкретного компьютера
(хоста).

Как правило, бывает необходимо настроить маршрутизацию по
упоминавшимся выше трем интерфейсам:
* локальный интерфейс (lo),
* интерфейс для платы Ethetnet (eth0),
* интерфейс для последовательного порта (PPP или SLIP).

Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому
для маршрутизации пакетов с адресом 127.... используется команда:

route add -net 127.0.0.1 lo


Если у вас для связи с локальной сетью используется одна плата
Ethernet, и все машины находятся в этой сети (сетевая маска
255.255.255.0), то для настройки маршрутизации достаточно вызвать:

route add -net 192.168.36.0 netmask 255.255.255.0 eth0


Если же вы имеете насколько интерфейсов, то вам надо определиться с
сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться
не в одну единственную сеть, а в разные сети (например, при просмотре
разных сайтов в Интернете), то в принципе надо было бы задать очень
много маршрутов. Очевидно, что сделать это было бы очень сложно,
точнее просто невозможно. Поэтому решение проблемы маршрутизации
пакетов перекладывают на плечи специальных компьютеров --
маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию,
который используется для отправки всех пакетов, не указанных явно в
таблице маршрутизации. С помощью маршрута по умолчанию вы говорите
ядру “а все остальное отправляй туда”. Маршрут по умолчанию
настраивается следующей командой:

route add default gw 192.168.1.1 eth0


Опция gw указывает программе route, что следующий аргумент – это
IP-адрес или имя маршрутизатора, на который надо отправлять все
пакеты, соответствующие этой строке таблицы маршрутизации.
Вот немного теории с сайта linuxcenter.ru

А теперь пример из жизни
Имеются следующие интерфейсы /etc/network/interfaces

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255


Интерфейс eth0 это связь с локальной сетью состоящей из 20 подсетей
192.168.1.х-192.168.20.х

Интерфейс eth1 это связь с ADSL модемом с выходом в интернет. Так
большинство запросов идут в Инет на этом интерфейсе прописываем шлюз
(gateway 192.168.254.1) данный параметр указывает в системе шлюз
по-умолчанию, обращаю внимание, что шлюз надо прописывать только на
одном интерфейсе, иначе в системе появятся 2 маршрута по умолчанию и
естно будет затупление в работе. С интернетом разобрались.

Но требуется еще просматривать ресурсы локальной сети
для этого надо выполнить вот эти команды

route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0


На этом примере маршрутизируются 3 подсети

Все эти команды и многие другие можно прописать в файлк
/etc/network/interfaces в итоге получится следующее:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.17.8
hwaddress ether 00:E0:4C:A2:C4:48
netmask 255.255.255.0
broadcast 192.168.17.255
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
up route add -net 192.168.21.0 netmask 255.255.255.0 gw 192.168.17.254 eth0
auto eth1
iface eth1 inet static
address 192.168.254.2
netmask 255.255.255.0
gateway 192.168.254.1
broadcast 192.168.254.255


Ну вот и все по аналогии настраиваются любое кол-во маршрутов и
сетевых интерфейсов

Дополнение 1.

Обратите внимание

hwaddress ether 00:E0:4C:A2:C4:48


так легко можно изменить MAC, не забываем после редактирования файла
делать рестарт

sudo /etc/init.d/networking restart


Дополнение 2.

Следует отметить, что:
1) Для того, чтобы просмотреть таблицу маршрутов достаточно запуска
команды route без параметров или route -n, если в сети нет DNS.
2) Маска может быть записана проще, в виде /x, где x – число единичных
битов, например:

route add -net 192.168.36.0/24 eth0


вместо

route add -net 192.168.36.0 netmask 255.255.255.0 eth0


Настройки сети размещаются в файле /etc/network/interfaces
При подключение к Inet через VPN (ppp0...), необходимо заменять
маршрут по умолчанию на ppp0.

А проще указать в файле /etc/ppp/options следующее:

defaultroute
replacedefaultroute


тогда маршрут заменяется сам и при отключении восстанавливается.

Дополнение 3.

Есть прога, серверная часть которой стоит во внутренней сети, например
Radmin Server, чтобы к нему подключиться клиентская прога (Radmin
Viewer) запрашивает соединение по порту 4799 (например). Все работает
внутри локальной сети. Есть шлюз (с внешним IP), через который
обеспечивает доступ в и-нет всех компов внутренней сети. Теперь
вопрос, как настроить шлюз, чтобы при обращении из вне клиентсокой
частью к IP шлюза по порту 4799, он пробрасывал этот запрос дальше,
например на 192.168.0.2 по томуже порту?

Для этого есть команда iptables:

iptables -t nat -D PREROUTING -i <интерфейс> -s <IP откуда будет коннект>
-p tcp --dport 4899 -j DNAT --to-destination 192.168.0.2:4899


Если ограничивать входящие IP не требуется, то опцию -s можно
опустить.
Пример:

iptables -t nat -D PREROUTING -i vlan1 -s 213.87.34.20/24 -p tcp
--dport 4899 -j DNAT --to-destination 192.168.128.24:4899

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 3658 -j DNAT
--to-destination 192.168.0.2:3658
2012   linux   ubuntu

Список ip адресов Microsoft

207.46.197.32 – microsoft.com
207.46.30.34 – live.com
207.46.20.126 – v4.windowsupdate.microsoft.com
207.46.18.94 – windowsupdate.microsoft.com
64.4.52.30 – office.microsoft.com
65.55.61.124 – download.live.com
65.54.206.34 – office.microsoft.com
65.55.200.252 – update.microsoft.com
131.107.115.40 – mpa.one.microsoft.com
64.4.52.248 – genuine.microsoft.com
206.223.115.17 – 8057.microsoft.com
207.46.236.175 – msn
207.46.45.85 – gateway msn


Не проверенные:
207.68.166.247
192.221.99.126
207.46.209.124 = hxxp://www.update.microsoft.com/
207.46.225.221 = hxxp://www.update.microsoft.com/
207.46.193.254
207.68.178.134
65.55.192.29 = hxxp://www.update.microsoft.com/
64.4.21.61 = hxxp://www.update.microsoft.com/
65.54.146.205 = sls.microsoft.com
207.46.18.94 = hxxp://www.update.microsoft.com

Чтобы заблокировать эти адреса необходимо открыть \WINDOWS\system32\drivers\etc\hosts и дописать в конец файла следующую строку:

127.0.0.1 host.microsoft.com
2012   windows

Утилита Screen

Введение

Данная утилита GNU Screen имеет множество функций. Очень удобно использовать эту утилиту при удаленном подключении к системе по ssh. Но наиболее частое ее применение – сворачивание в фон программ, которые сами этого не умеют, с возможностью последюущего возврата к ним. это может быть полезно при работе с программами, которые реализованы не в виде «демон+клиент», а единым целым, и не работают без запуска интерфейса. Типичный пример – rtorrent, который при всех своих преимуществах запускается только в виде консольного интерфейса, а в фон уходить не умеет, можно только «выйти вообще». Его и возьмем в качестве примера.

Запуск и основы работы Screen

Screen создает отдельные объекты, называемые иногда «скринами». Каждый скрин – это что-то вроде окна, которое можно свернуть-развернуть, если проводить аналогию с графическим интрефейсом. Только вместо окна вы получаете виртуальную консоль, которую можно отправить в фон или вывести на передний план, и в которой запускается указанное приложение.
Простейший запуск осуществляется командой:

screen

При запуске в таком виде, т.е. без параметров, программа создаст новый скрин, в котором откроет сессию командной оболочки, как если бы вы залогинились в tty-консоли или открыли новую вкладку в графическом терминале, для наглядности выполните что-нибудь в командной строке – например, ls.
Теперь о том, как свернуть запущенный скрин вместе со всем, что в нем работает. Для этого нужно нажать Ctrl+A, после чего нажать D. в принципе, это единственная комбинация, которую простому пользователю стоит запомнить. Сtrl+A переведет screen в командный режим. клавиша D даст команду свернуть текущий скрин. Теперь вы можете закрыть терминал или разлогиниться с tty-консоли – запущенный в свернутом скрине процесс продолжит работу в фоне.
Для того, чтобы вернуться к свернутому скрину, достаточно запустить:

screen -r

Ключ -r как раз и укажет программе, что нужно развернуть свернутый скрин (если таковой, конечно, имеется). Перед вами должна предстать та самая сессия в консоли, которую вы свернули, со всем, что в ней было.
Теперь выйдете из сессии с помощью команды exit. Screen сообщит о завершении своей работы. Таким образом, вам достаточно выйти из запущенного в скрине процесса, а screen выключится сама.
Далее запустим вышеупомянутый rtorrent. Делается это предельно просто – нужно указать screen команду для запуска. Тогда вместо командной оболочки откроется указанная программа:

screen rtorrent

Перед вами открылся rtorrent, его можно свернуть, а потом вернуться к нему, как описано выше. Rtorrent будет качать/раздавать в фоне, избавляя вас от необходимости держать ради него открытую вкладку терминала или tty-консоль (что еще и небезопасно).

Работа с несколькими скринами

Eсли вам нужно запустить лишь одну программу – вышеописанного более чем достаточно, но в случае если таких программ несколько – скринам нужно будет раздать имена, чтобы screen знала, к какому именно свернутому скрину вы хотите вернуться. Имя создаваемого скрина задается с помощью ключа -S:

screen -S rtor rtorrent

Cверните скрин с rtorrent’ом и запустите еще что-нибудь, к примеру nano:

screen -S nano nano

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

screen -r nano

Список запущенных скринов можно посмотреть с помощью:

screen -list

или

screen -ls

Возможно так-же вернуться к уже развернутому в ином терминале скрину:

screen -x nano

Запуск скрина в свернутом виде

Программу можно запустить сразу в свернутом скрине. Это полезно в случае с автозапуском, или когда вы знаете, что программа сама все сделает (установит соединение и продолжит закачку/раздачу в нашем примере с rtorrent), и смотреть там не на что. Делается все опять же просто. Команда на запуск будет такой:

screen -dmS rtor rtorrent

Ключ -d укажет, что скрин нужно свернуть, а ключ -m – что его нужно для начала создать. Процесс «усложняется» по той причине, что ключ -d по умолчанию используется для сворачивания ранее запущенного скрина, развернутого на другой консоли или в соседней вкладке, с той целью, чтобы развернуть его в текущем месте (ибо если одна и та же программа управляется из двух мест – это может и к конфузу привести). Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.

Прочие возможности

Данная статья описывает лишь основы. На самом деле утилита screen обладает массой возможностей, например: можно разбить экран пополам, отобразив несколько скринов с разными программами; можно задать множество разных параметров, настроить под разные типа терминалов. Во всем этом поможет разобраться screen –help или man screen. Также есть еще одна полезная комбинация клавиш. Как сказано в мануале, «если вам лень читать кучу текста – запомните эту комбинацию» – Ctrl+A и затем ? 1). Вам будет выведен список доступных сочетаний клавиш и команд, которые они выполняют. Все это нажимается также после Ctrl+A.
2012   linux   ubuntu

FTP сервер в Ubuntu

Моя задача была поднять FTP-сервер + открыть к нему доступ из интернета. Для выполнения этой задачи был выбран сервер proftpd. О его установке и настройке я хочу поведать Вам сегодня. В статье написано пошагово как это сделать:

Устанавливаем пакет proftpd:

sudo aptitude install proftpd

Отвечаем на появившийся вопрос о способе запуска: «самостоятельно». Открываем файл /etc/shells:

sudo gedit /etc/shells

Добавляем в него строку:

/bin/false

Создаем в /HOME каталоге папку FTP-shared(Не обязательно в корне /HOME и не обязательно такое имя папки, это просто пример):

sudo mkdir /home/FTP-shared

Теперь создаем пользователя с именем userftp(ну или что поинтересней):

sudo useradd userftp -p pass -d /home/FTP-shared -s /bin/false

Вместо «pass» – ввести свое слово или фразу в качестве пароля(не вводите только цифры, работать не будет). В папке FTP-shared создаем две вложенные папки(называем как хотим):

sudo mkdir /home/FTP-shared/public
sudo mkdir /home/FTP-shared/upload

Присвоим права созданным папкам:

sudo chmod 755 /home/FTP-shared
sudo chmod 755 /home/FTP-shared/public
sudo chmod 777 /home/FTP-shared/upload

FTP-shared и public – только чтение. upload – запись. Переименовываем имеющийся конфигурационный файл proftpd.conf и создаем новый:

sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old
sudo gedit /etc/proftpd/proftpd.conf

Добавляем в него: proftpd Если Вы создавали структуру папок, имя пользоватля и т.д не как в статье, то редактируйте данный файл под себя. После произведенных действий фтп-сервер будет иметь следующие параметры доступа:

user (пользователь): test
password (пароль): pass (тот, что присвоен для userftp)

Можно создать несколько пользователей, но все они должны быть прописаны в файле proftpd.conf. Если нужно сделать анонимный доступ, следует закомментировать обе секции для test и раскомментировать секцию для Anonymous. Сервер запущен, но с параметрами по умолчанию, перезагружаем его:

sudo /etc/init.d/proftpd restart

Что бы узнать, кто подключен к фтп-серверу в данный момент используется команда ftptop (клавиша t меняет отображение, q – выход). Полезные советы: Если нужно подключить какую-либо папку к фтп-серверу (например, проверить работу только что созданного фтп-сервера) без редактирования конфига пригодится команда:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/public

или с доступом на запись:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/upload

Таким образом можно в срочном порядке временно подключить папку или диск и потом отмонтировать командой:

sudo umount /home/FTP-shared/public
sudo umount /home/FTP-shared/upload

Для постоянного доступа к нужным папкам подключаем их посредством fstab. Бэкап файла fstab:

sudo cp /etc/fstab /etc/fstab.old

Открываем файл /etc/fstab:

sudo gedit /etc/fstab

и добавляем нужные пути:

/здесь/путь/папки/что/я/хочу/расшарить /home/FTP-shared/public none bind 0 0

Теперь даже при рестарте компьютера информация будет доступна, если сервер за роутером то только в локальной сети. Что бы увидеть фтп-сервер из интернета нужно дать ему внешний ip-адрес. Для этого следует открыть нужный порт (в данном случае 21) для локального адреса (вида 192.168.xxx.xxx) на котором висит сервер, для доступа извне. Следующим шагом нужно дать внешнему динамическому IP-адресу постоянный адрес. Сделать это можно при помощи сервиса DynDNS.com(регистрируемся), создав при помощи его удобный и запоминающийся адрес (вида moi-server.homeip.net). Устанавливаем ddclient:

sudo apt-get install ddclient

Вводим регистрационные данные с DynDNS.com на вопросы пакета. Изменяем ServerName «server» в файле proftpd.conf на ServerName «moi-server.homeip.net». Перезагружаем фтп-сервер:

sudo /etc/init.d/proftpd restart

Пользуемся Автор статьи – Монахов Сергей Спасибо за предоставленную статью
2012   linux   ubuntu

Перенаправление портов в виртуальную машину

Если вы желаете перенаправить определенные порты с хостовой в виртуальную машину, например, если вы хотите иметь почтовый сервер на ваиртуальной машине с адресом 192.168.122.90 и перенаправить порт smtp 25 и хост машину с адресом 192.168.0.10, то это можно сделать как-то так (на хост-машине):

iptables -t nat -A PREROUTING -d 192.168.0.10 -p tcp --dport 25 -j DNAT --to-destination 192.168.122.90:25
возможные ошибки
Не работает DNAT в KVM qemu

Мне помогло добавить запись:
iptables -I FORWARD -i eth0 -o virbr0 -p tcp -m state --state NEW -j ACCEPT

http://gorbach.me/2011/ubuntu-10-04-lts-kvm-netwoking/
2012   kvm   linux

Выключение Windows 2003/2008 через virsh shutdown

Для того, чтобы работал shutdown по ACPI в гостевой системе необходимо исправить ключ реестра:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\shutdownwithoutlogon
выставить 1.

p.s.
Правда одна проблема, если производится выключение терминального сервера с подключеными клиентами, выдается запрос:“Данный компьютер используется другими пользователями...”
и выключение не производится. Как обойти пока не знаю...

p.s.s.
Ура получилось!!!
Правим реестр:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Error Message Instrument]
“EnableDefaultReply”=dword:00000001

[добавлено]
На wiki от proxmox нашел еще один ключ, иногда windows выключался некорректно:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
“ShutdownWarningDialogTimeout”=dword:00000001

Перезагружаемся и проверяем.
2012   kvm   linux   shutdown   ubuntu   virsh