суббота, 29 августа 2009 г.

Фотоальбом 2009/08/29



Эксперименты с HDR






Мир вокруг...








Осторожно! Злая собака... стесняется.


Доча прибежала с криками - "Я змею нашла!".

Семья!


Доча.


Жена.

Читать дальше...

четверг, 27 августа 2009 г.

C# - Захват содержимого экрана (.net 2.0)


Бывает много ситуаций, когда необходимо сделать снимок экрана, на пример при поддержке установленного программного обеспечения снимок экрана может очень сильно помочь в описании проблемы.

В этой статье мы рассмотрим как сделать снимок экрана, отобразить его, а так же сохранить на диск.



В далекие времена .NET Framework 1.0, что бы сделать снимок экрана приходилось прибегать к вызову Windows API. В .NET Framework 2.0 в пространстве имен System.Drawing и System.Drawing.Imaging появляются новые классы, которые, благодаря GDI+, позволяют работать с графикой, используя только .NET.

Для демонстрации создадим простую Windows Forms программу, которая будет получать снимок экрана, отображать его на форме, а так же при необходимости сохранять его в виде графического файла.

Разместим на форме 4-е кнопки с именами btnCapture, btnSaveJpg, btnSavePng, btnClose, один PictureBox с именем img, а так же SaveFileDialog с именем dlg.


Перейдем к коду, нам потребуется подключить пространства имен System.Drawing и System.Drawing.Imaging.

using System.Drawing;
using System.Drawing.Imaging;

Теперь нам понадобится объект Bitmap (растровое изображение), который будет использоваться для хранения снимка экрана, но т.к. он будет нужен как при самом получении изображения, так и при сохранении изображения, то лучше его сделать частью класса frmMain.

public partial class frmMain : Form
{
private Bitmap captured;

public frmMain()
{
InitializeComponent();
}
...

Далее создадим процедуру получения снимка экрана по нажатию на кнопку btnCapture. Во первых необходимо определить размер создаваемого изображения, а так же глубину цвета. Эти данные можно получить из свойств объекта Screen. В примере будет использоваться основной экран, что для варианта с одним монитором вполне годится, а в случае с несколькими мониторами необходимо использовать массив Screen.AllScreens[].

Размер изображения:

Rectangle bounds = Screen.PrimaryScreen.Bounds;

Глубина цвета - это количество бит, выделяемых на каждую точку на экране, что в свою очередь определяет количество цветов, которое может принимать эта точка. Для минимизировать использование памяти будем использовать полученное значение для создания растрового изображения:

int colourDepth = Screen.PrimaryScreen.BitsPerPixel;

Что бы использовать полученное значение глубины цвета, необходимо создать объект RixelFormat, который представляет из себя перечисление и присвоить ему соответствующее значение. Существует некоторое ограничение для значения в 8-мь бит, по этому для таких снимков экрана будет создаваться 16-и битное изображение.

PixelFormat format;
switch (colourDepth)
{
case 8:
case 16:
format = PixelFormat.Format16bppRgb565;
break;

case 24:
format = PixelFormat.Format24bppRgb;
break;

case 32:
format = PixelFormat.Format32bppArgb;
break;

default:
format = PixelFormat.Format32bppArgb;
break;

}
Теперь, зная значение глубины цвета и размера изображения, можно инициализировать объект bitmap, которому ранее было присвоено имя captured:

captured = new Bitmap(bounds.Width, bounds.Height, format);
Переходим к использованию GDI+, создадим поверхность для рисования, которая будет связана с нашим растровым изображением.

Graphics gdi = Graphics.FromImage(captured);
Ну и наконец сделаем снимок экрана, в этом нам поможет метод CopyFromScreen, в него передаются 5-ть параметров, первые два это координаты левого верхнего пикселя копируемого изображения, следующие два это координаты места вставки изображения в "холст" GDI+, последний параметр это размер копируемой области.
gdi.CopyFromScreen(bounds.Left, bounds.Top, 0, 0, bounds.Size);
Ну а теперь можно вывести полученное изображение в PictureBox на нашей форме:
img.BackgroundImageLayout = ImageLayout.Zoom;
img.BackgroundImage = captured;
Вся процедура обработки нажатия на кнопку btnCapture:
private void btnCapture_Click(object sender, EventArgs e)
{
Rectangle bounds = Screen.PrimaryScreen.Bounds;
int colourDepth = Screen.PrimaryScreen.BitsPerPixel;
PixelFormat format;
switch (colourDepth)
{
case 8:
case 16:
format = PixelFormat.Format16bppRgb565;
break;

case 24:
format = PixelFormat.Format24bppRgb;
break;

case 32:
format = PixelFormat.Format32bppArgb;
break;

default:
format = PixelFormat.Format32bppArgb;
break;
}
captured = new Bitmap(bounds.Width, bounds.Height, format);
Graphics gdi = Graphics.FromImage(captured);
gdi.CopyFromScreen(bounds.Left, bounds.Top, 0, 0, bounds.Size);
img.BackgroundImageLayout = ImageLayout.Zoom;
img.BackgroundImage = captured;
}
Теперь создадим процедуры сохранения полученного изображения в файл.
Сохранение в формате jpeg при нажатии на кнопке btnSaveJpg.
Проверяем инициализирован ли объект bitmap, если да, то открываем диалоговое окно сохранения файла в котором настроен фильтр на отображение только изображений в формате jpeg, если файл выбран, то сохраняем, используя метод Save объекта Bitmap.
private void btnSaveJpg_Click(object sender, EventArgs e)
{
if (captured != null)
{
dlg.Filter = "Jpeg image|*.jpg|All files|*.*";
dlg.Title = "Save captured screen as jpeg";
if (dlg.ShowDialog() == DialogResult.OK)
{
captured.Save(dlg.FileName, ImageFormat.Jpeg);
}
}
}
Сохранение в формате png при нажатии на кнопке btnSavePng.

private void btnSavePng_Click(object sender, EventArgs e)
{
if (captured != null)
{
dlg.Filter = "PNG image|*.png|All files|*.*";
dlg.Title = "Save captured screen as png";
if (dlg.ShowDialog() == DialogResult.OK)
{
captured.Save(dlg.FileName, ImageFormat.Png);
}
}
}

Вот и все.

Скачать исходный код примера.

Читать дальше...

понедельник, 17 августа 2009 г.

MiktoTik - Два провайдера - распределение по каналам


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

На пример веб сервер, выведенный через NAT на IP адрес первого провайдера получает запрос, а вот вероятность того, что ответ пойдет по нужному каналу уже не 100%. Какой же он после этого веб сервер?


Решить эту проблему нам поможет механизм маркировки пакетов.

Таблица MANGLE предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов.
В частности нас интересует цепочка PREROUTING, которая позволяет маркировать пакет до маршрутизации.

Попробуем разобраться с веб сервером.

Допустим у нас настроен NAT 80 порта с внешнего IP 192.168.1.116 (ISP1, первый провайдер) на 80 порт веб сервера в локальной сети и необходимо гарантировать, что все ответы, которые буду идти от веб сервера попадали на шлюз первого провайдера.


Вот правило для таблицы NAT.
[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT 80 port from ISP1 to local web server"

[mkt@MikroTik] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade out-interface=!LOCAL

1 ;;; NAT 80 port from ISP1 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.1.116 dst-port=80

Первым шагом создадим правило в таблице MANGLE.
[mkt@MikroTik] > ip firewall mangle add chain=prerouting  src-address=192.168.0.2
protocol=tcp src-port=80 action=mark-routing new-routing-mark=to-isp1

[mkt@MikroTik] > ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=prerouting action=add-src-to-address-list protocol=tcp
address-list=test_list address-list-timeout=0s dst-port=23

1 chain=prerouting action=mark-routing new-routing-mark=to-isp1
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 с 80 порта буду маркироваться как to-isp1.

Вторым шагом добавим правило в таблицу маршрутизации.

[mkt@MikroTik] > ip route add gateway=192.168.1.249 routing-mark=to-isp1


[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.1.249 r...
192.168.222.1 r...
2 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
3 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
4 ADC 192.168.222.0/24 192.168.222.100 ISP2 0
Все что приходит с маркером to-isp1 отправляется на шлюз первого провайдера.

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

В первую очередь добавляем правило в таблицу NAT, по которому все запросы, пришедшие на внешний IP адрес, который предоставляет 2-ой провайдер, на 80 порт будут переадресовываться на 80 порт локального веб сервера.
[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.222.100
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT 80 port from ISP2 to local web server"

[mkt@MikroTik] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade out-interface=!LOCAL

1 ;;; NAT 80 port from ISP1 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.1.116 dst-port=80

2 ;;; NAT 80 port from ISP2 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.222.100 dst-port=80


Следующим шагом добавим в таблицу MANGLE еще одно правило:
[mkt@MikroTik] > ip firewall mangle add chain=prerouting src-address=192.168.0.2
protocol=tcp src-port=80 dst-address=192.168.222.0/24 action=mark-routing
new-routing-mark=to-isp2

[mkt@MikroTik] > ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=prerouting action=add-src-to-address-list protocol=tcp
address-list=test_list address-list-timeout=0s dst-port=23

1 chain=prerouting action=mark-routing new-routing-mark=to-isp2
passthrough=yes protocol=tcp src-address=192.168.0.2
dst-address=192.168.222.0/24 src-port=80

2 chain=prerouting action=mark-routing new-routing-mark=to-isp1
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 с 80 порта буду маркироваться как to-isp2 если они предназначены для подсети второго провайдера.

Ну и в заключении правило в таблице маршрутизации:

[mkt@MikroTik] > ip route add gateway=192.168.222.1 routing-mark=to-isp2

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 A S 0.0.0.0/0 192.168.222.1 r... 1
2 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.1.249 r...
192.168.222.1 r...
3 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
4 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
5 ADC 192.168.222.0/24 192.168.222.100 ISP2 0
Теперь на запросы, пришедшие со стороны первого провайдера, ответ пойдет на шлюз первого провайдера, а на запросы со стороны второго провайдера и из подсети второго провайдера ответ пойдет на шлюз второго провайдера.

Продолжение следует.

Progg it

Читать дальше...

суббота, 1 августа 2009 г.

MiktoTik - Два провайдера - балансировка нагрузки



В последнее время ситуация, когда доступны несколько провайдеров не нова, MikroTik Router OS позволяет настроить доступ сразу по нескольким сетевым интерфейсам, а так же настроить балансировку нагрузки в зависимости от ограничений, которые выставляет провайдер.





Первым шагом настроим дополнительный интерфейс.

Инициализируем сам интерфейс.
[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ether1 ether 1500
1 R ether2 ether 1500
2 X ether3 ether 1500

[mkt@MikroTik] /interface> enable 2

[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ether1 ether 1500
1 R ether2 ether 1500
2 R ether3 ether 1500

Для удобства все же пора дать более понятные имена интерфейсам.

[mkt@MikroTik] /interface> set ether1 name="ISP1"

[mkt@MikroTik] /interface> set ether2 name="LOCAL"

[mkt@MikroTik] /interface> set ether3 name="ISP2"

[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ISP1 ether 1500
1 R LOCAL ether 1500
2 R ISP2 ether 1500

Теперь назначим IP адрес новому интерфейсу.

[mkt@MikroTik] > ip address add address=192.168.222.100/24 interface=ISP2

[mkt@MikroTik] > ip address print
Flags: X - disabled, I - invalid, D - dynamic
# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ISP1
1 192.168.0.1/24 192.168.0.0 192.168.0.255 LOCAL
2 192.168.222.100/24 192.168.222.0 192.168.222.255 ISP2

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

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

[mkt@MikroTik] > ip route remove 0

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
1 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
2 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

И добавим новый, точнее новые.

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0
gateway=192.168.1.249,192.168.222.1

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.222.1 r...
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

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

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0
gateway=192.168.1.249,192.168.1.249,192.168.222.1

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.222.1 r... 1
192.168.1.249 r...
192.168.1.249 r...
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0


Это простейший вариант настройки, при котором получаем выход в интернет с балансировкой нагрузки, но у такого подхода есть ряд недостатков, на пример не будет работать доступ через на NAT к локальному серверу (сервисы web, smtp, pop, которые были настроены
ранее), но не такая большая проблема, но об этом в следующий раз.

Продолжение следует.
Progg it

Читать дальше...

среда, 15 июля 2009 г.

MikroTik - Списки и группы адресов



Когда настраивается маршрутизатор, который отвечает за доступ к сети для нескольких человек, то достаточно прописать правила для конкретных адресов в firewall filter rules и на этом успокоится, но когда ip, которым нужно прописать доступ, не один десяток?

Для решения проблемы управления большим количеством ip адресов в MiktoTik Router OS есть механизм сознания списков адресов и объединения их в группы. Дальше составления правил для firewall-а идет на основании этих групп. Адреса можно добавлять как в ручную, так и динамически с помощью правил.

Рассмотрим ручное добавление адресов:

Перейдем в раздел address-list.
/ip firewall address-list

Для дальнейших примеров будем использовать описанную ранее конфигурацию сети.

  • Mikrotik - 192.168.0.1

  • PC 5 - 192.168.0.2, web, ftp, mail сервер

  • PC 4 - 192.168.0.10, Администратор, полный доступ

  • PC 1 - 192.168.0.20, Простой доступ: http, https, icq, jabber, ftp

  • PC 2 - 192.168.0.21, Простой доступ: http, https, icq, jabber, ftp

  • PC 3 - 192.168.0.22, Простой доступ: http, https, icq, jabber, ftp


Сразу видно, что адреса можно разделить на три группы доступа:

  • SERVER (192.168.0.2)

  • FULL (192.168.0.10)

  • USER (192.168.0.20, 192.168.0.21, 192.168.0.22)


Группа создается простым упоминанием о ней. Добавим адрес 192.168.0.2 в группу SERVER:

[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.2/32"
list="SERVER" comment="web, ftp, mail server"

Адрес 192.168.0.10 в группу FULL:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.10/32"
list="FULL" comment="Administrator"

Адресa 192.168.0.20, 192.168.0.21, 192.168.0.22 в группу USER:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.20/32"
list="USER" comment="User #1"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.21/32"
list="USER" comment="User #2"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.22/32"
list="USER" comment="User #3"

Посмотрим, что у нас получилось:
[mkt@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22

Теперь можно пересмотреть наши правила, созданные раннее.
Правила для администратора, написанные ранее:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.10/32
action=accept comment="Allow all for admin"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.10/32
action=accept comment="Allow all for admin"

Можно переписать так:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="FULL
action=accept comment="Allow all for group FULL"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="FULL
action=accept comment="Allow all for group FULL"

Изменим правила сервера, созданные ранне:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=80 action=accept comment="Allow http for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=80 action=accept comment="Allow http for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=25 action=accept comment="Allow smtp for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=25 action=accept comment="Allow smtp for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=110 action=accept comment="Allow pop for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=110 action=accept comment="Allow pop for server (out)"

На эти:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=80 action=accept comment="Allow http for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=25 action=accept comment="Allow smtp for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=25 action=accept comment="Allow smtp for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=110 action=accept comment="Allow pop for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=110 action=accept comment="Allow pop for group SERVER (out)"

Пока что оптимизация не большая, но сейчас займемся правилами для доступа простых пользователей и вместо блока, повторяющегося 3-и раза для каждой машины:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=80 action=accept comment="Allow http for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=80 action=accept comment="Allow http for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=443 action=accept comment="Allow https for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=443 action=accept comment="Allow https for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=21 action=accept comment="Allow ftp for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=21 action=accept comment="Allow ftp for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5190 action=accept comment="Allow icq for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5190 action=accept comment="Allow icq for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5222 action=accept comment="Allow jabber for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for pc1 (out)"

Создадим блок правил для группы USER:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=80 action=accept comment="Allow http for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=443 action=accept comment="Allow https for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=443 action=accept comment="Allow https for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=21 action=accept comment="Allow ftp for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=21 action=accept comment="Allow ftp for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5190 action=accept comment="Allow icq for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5190 action=accept comment="Allow icq for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5222 action=accept comment="Allow jabber for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for group USER (out)"

Теперь, когда в сети появляется новая машина, которой нужно дать права для доступ в сеть, то достаточно добавить ее в соответствующую группу адресов.
На пример у нас появляется новая машина с адресом 192.168.0.23, которой нужен доступ как и остальных пользователей группы USER, но за исключением доступа к ICQ и JABBER, ну уж очень болтливый пользователь :)
Добавим его в группу USER, а так же в новую группу BLOCK_IM
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="USER" comment="User #4"
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="BLOCK_IM" comment="User #4"

Получим:
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23

Теперь машина с ip адресом 192.168.0.23 уже имеет доступ, оговоренный для группы USER, но не блокируется траффик ICQ и JABBER.
Создадим дополнительные правила для группы BLOCK_IM.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5190 action=drop comment="Drop icq for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5190 action=drop comment="Drop icq for group BLOCK_IM (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (in)"

Посмотрим, что получилось:
[mkt@MikroTik] > ip firewall filter print
Flags: X - disabled, I - invalid, D - dynamic
0 ;;; Drop invalid connection
chain=forward action=drop connection-state=invalid

1 ;;; Allow established connections
chain=forward action=accept connection-state=established

2 ;;; Allow related connections
chain=forward action=accept connection-state=related

3 ;;; Allow UDP
chain=forward action=accept protocol=udp

4 ;;; Allow ICM Ping
chain=forward action=accept protocol=icmp

5 ;;; Allow all for group FULL
chain=forward action=accept dst-address-list=FULL

6 ;;; Allow all for group FULL
chain=forward action=accept src-address-list=FULL

7 ;;; Allow http for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=80

8 ;;; Allow http for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=80

9 ;;; Allow smtp for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=25

10 ;;; Allow smtp for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=25

11 ;;; Allow pop for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=110

12 ;;; Allow pop for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=110

13 ;;; Allow http for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=80

14 ;;; Allow http for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=80

15 ;;; Allow https for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=443

16 ;;; Allow https for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=443

17 ;;; Allow ftp for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=21

18 ;;; Allow ftp for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=21

19 ;;; Allow icq for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5190

20 ;;; Allow icq for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5190

21 ;;; Allow jabber for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5222

22 ;;; Allow jabber for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5222

23 ;;; Drop all
chain=forward action=drop

24 ;;; Drop icq for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5190

25 ;;; Drop icq for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5190

26 ;;; Drop jabber for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5222

27 ;;; Drop jabber for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5222

В таком варианте блокирование траффика IM не будет т.к. правила разрешающие его 19, 20, 21, 22 стоят выше, чем блокирующие 24, 25, 26, 27. Поднимем их повыше.
[mkt@MikroTik] > ip firewall filter move 24 5
[mkt@MikroTik] > ip firewall filter move 25 5
[mkt@MikroTik] > ip firewall filter move 26 5
[mkt@MikroTik] > ip firewall filter move 27 5

Теперь все работает, что надо пропустить - пропускается, что надо заблокирова - блокируется.

Но адреса можно добавлять не только в ручную, но и динамически, для этого используется таблица Mengle.

Рассмотрим динамическое добавление адресов.

К примеру, нам необходимо заблокировать пользователей, подключающихся из вне к маршрутизатору по протоколу Telnet.
Создаем правило в таблице Mangle, которое добавляет ip адрес источника при попытке подключиться по протоколу tcp на 23 порт через интерфейс ether1, который подключен к провайдеру в группу BLOCK.
[mkt@MikroTik] > ip firewall mangle add chain=prerouting protocol=tcp dst-port=23
in-interface=ether1 action=add-src-to-address-list address-list="BLOCK"

Теперь создадим правило, которое будет блокировать ip адреса, внесенные в группу BLOCK, а заодно поднимем правило на самый верх таблицы.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list=BLOCK
action=drop comment="Block incomming from group BLOCK"

[mkt@MikroTik] > ip firewall filter move 28 0

После того, как кто то попробует подключиться к маршрутизатору из вне, то, он автоматически будет включен в группу BLOCK, как это получилось с адресом 192.168.1.217.
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23
7 D BLOCK 192.168.1.217

Это ни в коем случае не "рабочее" решение по защите маршрутизатора, а просто демонстрация работы таблицы Mangle и автоматического добавления адресов в группу.

Продолжение следует.
Progg it

Читать дальше...

пятница, 3 июля 2009 г.

MS SQL Function Split

Вариант реализации функции Split, которая разрезает строку на мини-таблицу, по умолчанию в качестве разделителя используется пробел.
CREATE FUNCTION [dbo].[fn_Split](
@text nvarchar(max),
@delimiter char(1) = ' '
)

RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value nvarchar(max)
)
AS
BEGIN
DECLARE @INDEX int
SET @INDEX = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @INDEX = CHARINDEX(@delimiter , @text)
IF (@INDEX = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@INDEX > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @INDEX - 1))
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
RETURN
END
Пример:
SELECT * FROM [dbo].[fn_Split] (
'hello;world;split'
,';'
)
Результат:

positionVALUE
11hello
22world
33split


Читать дальше...

среда, 24 июня 2009 г.

MikroTik - Начальная настройка


В этой статье я расскажу как быстро настроить RouterOS MikroTik для работы в "простом" варианте, который подойдет многим не большим офисам, домашней сети и т.д...
Итак, допустим имеем канал доступа к сети Internet, локальную сеть на 5-ть компьютеров, 1 из которых сервер, необходимо разрешить работу рядовым пользователям по стандартным протоколам (http, https, icq, jabber, ftp), для рабочего места системного администратора сделать полный доступ к сети, разрешить работу почтового, фтп и web сервера.



IP адреса локальной сети:
  • Mikrotik - 192.168.0.1
  • PC 5 - 192.168.0.2
  • PC 4 - 192.168.0.10
  • PC 1 - 192.168.0.20
  • PC 2 - 192.168.0.21
  • PC 3 - 192.168.0.22

Провайдер может предоставлять Вам как белый так и серый ip адрес, допустим, что в нашем конкретном случае это серый адрес, где то в локальной сети провайдера.



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

[admin@MikroTik] > use add name=mkt password=P@S#w0Rd group=full
[admin@MikroTik] > quit

заходим под новым пользователем и отключаем admin-а

[mkt@MikroTik] > user disable admin
[mkt@MikroTik] > user print
Flags: X - disabled
# NAME GROUP ADDRESS
0 X;;; system default user
admin full 0.0.0.0/0
1 mkt full 0.0.0.0/0


Шаг 2. Настройка интерфейсов.
Тут есть несколько способов, первый воспользоваться мастером, второй задать вручную.
Сперва попробуем настроить интерфейсы при помощи мастера. Набираем команду setup.

[mkt@MikroTik] > setup
Setup uses Safe Mode. It means that all changes that are made during setup are
reverted in case of error, or if

Ctrl-C is used to abort setup. To keep changes exit setup using the 'x' key.

[Safe Mode taken]
Choose options by pressing one of the letters in the left column, before dash.
Pressing 'x' will exit current

menu, pressing Enter key will select the entry that is marked by an '*'. You can
abort setup at any time by

pressing Ctrl-C.
Entries marked by '+' are already configured.
Entries marked by '-' cannot be used yet.
Entries marked by 'X' cannot be used without installing additional packages.
r - reset all router configuration
+ l - load interface driver
+ a - configure ip address and gateway
d - setup dhcp client
* s - setup dhcp server
p - setup pppoe client
t - setup pptp client
x - exit menu
your choice [press Enter to setup dhcp server]:

Нажимаем "a", в появившемся меню нажимаем "a", набираем имя первого интерфейса, указываем IP адрес.

 + a - add ip address
+ g - setup default gateway
* x - exit menu
your choice: a
enable interface: ether1
ip address/netmask: 192.168.1.116/24
#Enabling interface
/interface enable ether1
#Adding IP address
/ip address add address=192.168.1.116/24 interface=ether1 comment="added by setup"


Это будет интерфейс провайдера. Так же указываем второй интерфейс для локальной сети и адрес для него.

 + a - add ip address
+ g - setup default gateway
* x - exit menu
your choice: a
enable interface: ether2
ip address/netmask: 192.168.0.1/24
#Enabling interface
/interface enable ether2
#Adding IP address
/ip address add address=192.168.0.1/24 interface=ether2 comment="added by setup"

Теперь указываем шлюз по умолчанию, выбираем клавишей "g" и вводим адрес.

your choice: g
gateway: 192.168.1.249
#Adding default route
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.249 comment="added by setup"

Выходим из второго уровня меню (клавиша "x"), и из первого (клавиша "x"), настройки ip адресов сохранены, шлюз по умолчанию прописан.


Испробуем второй вариант настройки - ручной.



Смотрим список доступных интерфесов.


[mkt@MikroTik] > interface print 
Flags: D - dynamic, X - disabled, R - running, S - slave

# NAME TYPE MTU

0 R ether1 ether 1500

1 R ether2 ether 1500

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

[mkt@MikroTik] > interface enable 0 
[mkt@MikroTik] > ip address add address=192.168.1.116/24 interface=ether1

[mkt@MikroTik] > ip address print

Flags: X - disabled, I - invalid, D - dynamic

# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ether1

Проделаем туже про процедуру с локальным интерфейсом.

[mkt@MikroTik] > interface enable 1 
[mkt@MikroTik] > ip address add address=192.168.0.1/24 interface=ether2

[mkt@MikroTik] > ip address print

Flags: X - disabled, I - invalid, D - dynamic

# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ether1
1 192.168.0.1/24 192.168.0.0 192.168.0.255 ether2


Ну и наконец добавим шлюз по умолчанию.


[mkt@MikroTik] > ip route add gateway=192.168.1.249 
[mkt@MikroTik] > ip route print

Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip,
b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 ADC 192.168.0.0/24 192.168.0.1 ether2 0
2 ADC 192.168.1.0/24 192.168.1.116 ether1 0


Теперь дальнейшую настройку можно продолжить с помощью графической оболочки winbox, но коль мы начали с консоли, то пройдем весь путь до конца в консоле, а потом повторим сделанное, начиная с шага 3 в графическом интерфейсе.


Шаг 3.
Настройка DNS.

[mkt@MikroTik] > ip dns set primary-dns=208.67.222.222 secondary-dns=208.67.220.220
allow-remote-requests=yes


[mkt@MikroTik] > ip dns print

primary-dns: 208.67.222.222

secondary-dns: 208.67.220.220

allow-remote-requests: yes

max-udp-packet-size: 512

cache-size: 2048KiB

cache-max-ttl: 1w

cache-used: 5KiB


Шаг 4. Настройка доступа к сети интернет.

Сперва включаем маскардинг.

[mkt@MikroTik] > ip firewall nat add chain=srcnat action=masquerade
out-interface
=!ether2

Добавляем правила для служебных пакетов.

[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=invalid
action=drop comment="Drop invalid connection packets"


[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=established
action=accept comment="Allow established connections"


[mkt@MikroTik] > ip firewall filter add chain=forward connection-state=related
action=accept comment="Allow related connections"


[mkt@MikroTik] > ip firewall filter add chain=forward protocol=udp
action=accept comment="Allow UDP"


[mkt@MikroTik] > ip firewall filter add chain forward protocol=icmp

action=accept comment="Allow ICMP Ping"

Дальше добавляем правила для машины PC4.

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.10/32
action=accept comment="Allow all for admin"


[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.10/32
ac
tion=accept comment="Allow all for admin"

Разрешаем работу сервера до протоколу http, smtp, pop.


[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=80
action=accept comment="Allow http for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=80
action=accept comment="Allow http for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=25
action=accept comment="Allow smtp for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=25
action=accept comment="Allow smtp for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=110
action=accept comment="Allow pop for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32

protocol=tcp dst-port=110
action=accept comment="Allow pop for server (out)"

Таким же образом задаем правила для остальных машин, разрешая им http, https, ftp, icq, jabber.

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=80
action=accept comment="Allow http for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=80
action=accept comment="Allow http for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=443
action=accept comment="Allow https for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=443
action=accept comment="Allow https for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=21
action=accept comment="Allow ftp for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=21
action=accept comment="Allow ftp for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5190
action=accept comment="Allow icq for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=5190
action=accept comment="Allow icq for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5222
action=accept comment="Allow jabber for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32

protocol=tcp dst-port=5222
action=accept comment="Allow jabber for pc1 (out)"

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

Ну и под конец запрещаем все остальное, что не разрешили выше.

[mkt@MikroTik] > ip firewall filter add chain=forward action=drop comment="Drop all"


Шаг 5. Входящие.

Теперь надо разрешить что бы входящие соединения по http, smtp и pop автоматически попадали бы на сервер.

[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT for http"


[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=25 action=dst-nat to-addresses=192.168.0.2 to-ports=25
comment="NAT for smtp"


[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116/32
protocol=tcp dst-port=110 action=dst-nat to-addresses=192.168.0.2 to-ports=110
comment="NAT for pop"


Если мы говорим про абсолютный минимум и простоту, это на этом все. Какие действия были сделаны?

  1. Были включены два интерфейса ether1 и ether2.
  2. Назначены ip адреса для интерфейсов.
  3. Назначен шлюз по умолчанию.
  4. Заданы DNS сервера.
  5. Прописаны правила для машин с неограниченным доступом.
  6. Прописаны правила для машин с ограниченным доступом по портам.
  7. Прописаны правила преобразования сетевых адресов для доступа из вне к веб и почтовому серверам.
Теперь давайте вернемся в шагу №3 и сделаем все те же действия, но уже в графической оболочке winbox, что бы ее скачать необходимо зайти в веб интерфейс mikrotik-а, так называемый webbox, и скачать с главной страницы программку.


Запускаем, указываем адрес в локальной сети, который был назначен второму интерфейсу, имя и пароль пользователя, которого завели в самом начале.


Шаг 3. Настройка DNS.

В графическом интерфейсе все не на много сложнее чем в консоле. Выбираем в основном меню раздел IP, в нем подменю DNS.


Здесь можно завадать статически dns записи, а так же просматривать что сейчас есть в кэше. Нажимаем на кнопочку Settings и указываем адреса DNS серверов.


Шаг 4. Настройка доступа к сети интернет.

Включаем маскардинг. Основное меню IP, в подменю firewall, вкладка NAT.


Что бы добавить новую запись нажимаем на плюсик. А дальше все тоже самое, что и в консоле, на вкладке General chain=srcnat, Out interface=ether2 и ставим галочку, что означает "НЕ", вкладка Action выбираем masquerade.


Приводить кучу одинаковых скришотов на одну и туже тему я не вижу смысла, а понять что все теже самые параметры, которые набираются в консоле на 100% совпадают с названиями в графическом интерфейсе думаю не сложно. По это я приведу несколько картинок с добавлением правил в firewall. Выбираем в основном меню раздел ip, в нем подпункт firewall, в появившемся окне выбираем вкладку Filter Rules. Для добавления нового графила нажимаем на плюсик.


Разрешаем UDP.

Разрешаем исходящие соединения с адреса 192.168.0.2 к любым адресам по порту назначения 25, используюя протокол tcp.

Ну и под конец запрещаем все остальное, что не разрешили выше.

Получилось что то вроде этого.


Шаг 5. Входящие.
Выбираем в основном меню раздел ip, в нем подпункт firewall, в появившемся окне выбираем вкладку Nat. Для добавления нового графила нажимаем на плюсик.

Перенаправляем все соединения, приходящие на внешний адрес 192.168.1.116 по протоколу tcp, 25 порт на локальный адрес 192.168.0.2 на порт 25.

По такому же принципу строятся все остальные правила.

Из описанного выше видно, что любое действие можно сделать как минимум двумя вариантами, разговаривать с MikroTik-ом с помощью текстовых команд или упражняться с мышкой в графическом интерфейсе. И у то и у другого метода есть свои плюсы и минусы, консоль работает быстрее даже на очень слабом канале, графическая оболочка вообще перед началом работы скачивает модули интерфейса к себе, а потом в процессе работы порождает очень даже не маленький трафик, с консолью определенно сложнее работать, но поняв комманды и принцип работы становится не так важно какой интерфейс используется для настройки. В дальнейшем я расскажу как уменьшить количесво правил, используя списки адресов, как ограничивать скорость на upload или download, как разделить трафик между несколькими провайдерами или даже как заставить одну машину работать одновременно с несколькими провайдерами.

Продолжение следует.

Progg it


Читать дальше...