<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Записки на полях &#187; stargazer</title>
	<atom:link href="http://snake.khd.ru/tag/stargazer/feed/" rel="self" type="application/rss+xml" />
	<link>http://snake.khd.ru</link>
	<description>cat /var/log/messages</description>
	<lastBuildDate>Sun, 05 Feb 2012 11:22:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Операция &#8220;Кооперация&#8221;: IPFW, stargazer и 4 ADSL-соединения</title>
		<link>http://snake.khd.ru/2011/01/operaciya-kooperaciya-ipfw-stargazer-i-4-adsl-soedineniya-chast-1/</link>
		<comments>http://snake.khd.ru/2011/01/operaciya-kooperaciya-ipfw-stargazer-i-4-adsl-soedineniya-chast-1/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 08:46:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[ipfw]]></category>
		<category><![CDATA[stargazer]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://snake.khd.ru/?p=655</guid>
		<description><![CDATA[Общага &#8211; место крайне полезное, особенно для тех, кто умеет искать халяву. Еда, выпивка, интернет&#8230; стоит лишь немного поднапрячься. В одной из таких общаг мы и будем творить свои злобные делишки &#8211; раздавать людям интернеты анлимно и покилограммно. Под катом много конфигов и технических терминов, так что слабонервным и гуманитариям лучше не заходить Что мы <a href='http://snake.khd.ru/2011/01/operaciya-kooperaciya-ipfw-stargazer-i-4-adsl-soedineniya-chast-1/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Общага &#8211; место крайне полезное, особенно для тех, кто умеет искать халяву. Еда, выпивка, интернет&#8230; стоит лишь немного поднапрячься. В одной из таких общаг мы и будем творить свои злобные делишки &#8211; раздавать людям интернеты анлимно и покилограммно.<br />
Под катом много конфигов и технических терминов, так что слабонервным и гуманитариям лучше не заходить<br />
<span id="more-655"></span></p>
<p>Что мы имеем?<br />
- 4 ADSL-модема с безлимитами на каждом<br />
- Сервер на <a href="http://snake.khd.ru/tag/freebsd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FreeBSD">FreeBSD</a> 8.1<br />
- <a href="http://www.lissyara.su/?id=1967" target="blank_">IPFW NAT</a><br />
- Старгайзер в качестве <a href="http://snake.khd.ru/2009/10/poschitaem-vse-stargazer-kak-billing-dlya-nebolshoj-lokalki/" target="blank_">биллинга</a></p>
<p>Вполне достаточно для наших целей. Перво-наперво, проверяем, чтобы в ядро было собрано с вот такими опциями:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">##USER_OPTIONS</span>
<span style="color: #666666; font-style: italic;">#Сам IPFW</span>
options         IPFIREWALL
options         IPFIREWALL_FORWARD
<span style="color: #666666; font-style: italic;">#Включаем режим логов</span>
options         IPFIREWALL_VERBOSE
options         <span style="color: #007800;">IPFIREWALL_VERBOSE_LIMIT</span>=<span style="color: #000000;">100</span>
<span style="color: #666666; font-style: italic;">#Включаем, собственно, NAT</span>
options         IPFIREWALL_NAT
options         IPDIVERT
options         LIBALIAS
<span style="color: #666666; font-style: italic;">#Создаем 5 независимых таблиц маршрутизации: 4 для пользователей и одну для сервера</span>
options         <span style="color: #007800;">ROUTETABLES</span>=<span style="color: #000000;">5</span>
options         <span style="color: #007800;">HZ</span>=<span style="color: #000000;">4000</span></pre></div></div>

<p>Далее просто приведу примеры своих конфигов с комментариями, ибо от howto большего и не требуется <img src='http://snake.khd.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Для начала &#8211; настраиваем таблицы маршрутизации. Для этого создаем файлик /usr/local/etc/rc.d/setfib1:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;"># PROVIDE: SETFIB1</span>
<span style="color: #666666; font-style: italic;"># REQUIRE: NETWORKING</span>
<span style="color: #666666; font-style: italic;"># BEFORE: DAEMON</span>
<span style="color: #666666; font-style: italic;"># </span>
<span style="color: #666666; font-style: italic;"># Add the following lines to /etc/rc.conf to enable setfib -1 at startup</span>
<span style="color: #666666; font-style: italic;"># setfib1 (bool): Set to &quot;NO&quot; by default.</span>
<span style="color: #666666; font-style: italic;">#                Set it to &quot;YES&quot; to enable setfib1</span>
<span style="color: #666666; font-style: italic;"># setfib1_defaultroute (str): Set to &quot;&quot; by default</span>
<span style="color: #666666; font-style: italic;">#       Set it to ip address of default gateway for use in fib 1</span>
&nbsp;
. <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.subr
&nbsp;
<span style="color: #007800;">name</span>=<span style="color: #ff0000;">&quot;setfib1&quot;</span>
<span style="color: #007800;">rcvar</span>=<span style="color: #000000; font-weight: bold;">`</span>set_rcvar<span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
load_rc_config <span style="color: #007800;">$name</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$setfib1_enable</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">setfib1_enable</span>=<span style="color: #ff0000;">&quot;NO&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$setfib1_defaultroute</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #007800;">setfib1_defaultroute</span>=<span style="color: #ff0000;">&quot;&quot;</span>
&nbsp;
<span style="color: #007800;">start_cmd</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${name}</span>_start&quot;</span>
<span style="color: #007800;">stop_cmd</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${name}</span>_stop&quot;</span>
&nbsp;
setfib1_start<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #800000;">${setfib1_defaultroute}</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
setfib <span style="color: #000000;">1</span> route add <span style="color: #660033;">-net</span> default <span style="color: #800000;">${setfib1_defaultroute}</span>
<span style="color: #000000; font-weight: bold;">else</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Can't set defaultroute for fib 1 (setfib1_defaultroute is not set)&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
setfib1_stop<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
setfib <span style="color: #000000;">1</span> route del <span style="color: #660033;">-net</span> default
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Делаем его исполняемым, и так для каждой таблицы (кроме дефолтной) &#8211; т.е. четыре штуки</p>
<p>В rc.conf:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">gateway_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">hostname</span>=<span style="color: #ff0000;">&quot;my_server.lan&quot;</span>
<span style="color: #666666; font-style: italic;">#Интерфейс, смотрящий во внутреннюю сеть</span>
<span style="color: #007800;">ifconfig_fxp0</span>=<span style="color: #ff0000;">&quot;inet 10.0.0.1 netmask 255.255.255.0&quot;</span>
<span style="color: #666666; font-style: italic;">#Интерфейс, смотрящий на модемы</span>
<span style="color: #007800;">ifconfig_fxp1</span>=<span style="color: #ff0000;">&quot;inet 192.169.0.5 netmask 255.255.255.0&quot;</span>
<span style="color: #666666; font-style: italic;">#Каждый модем в своем влане</span>
<span style="color: #007800;">cloned_interfaces</span>=<span style="color: #ff0000;">&quot;vlan1691 vlan1692 vlan1693 vlan1694 vlan1695&quot;</span>
<span style="color: #007800;">ifconfig_vlan1691</span>=<span style="color: #ff0000;">&quot;inet 192.169.1.5 netmask 255.255.255.0 vlan 1691 vlandev fxp1&quot;</span>
<span style="color: #007800;">ifconfig_vlan1692</span>=<span style="color: #ff0000;">&quot;inet 192.169.2.5 netmask 255.255.255.0 vlan 1692 vlandev fxp1&quot;</span>
<span style="color: #007800;">ifconfig_vlan1693</span>=<span style="color: #ff0000;">&quot;inet 192.169.3.5 netmask 255.255.255.0 vlan 1693 vlandev fxp1&quot;</span>
<span style="color: #007800;">ifconfig_vlan1694</span>=<span style="color: #ff0000;">&quot;inet 192.169.4.5 netmask 255.255.255.0 vlan 1694 vlandev fxp1&quot;</span>
<span style="color: #666666; font-style: italic;">#влан, смотрящий в локальную сеть провайдера</span>
<span style="color: #007800;">ifconfig_vlan1695</span>=<span style="color: #ff0000;">&quot;inet 192.168.100.9 netmask 255.255.255.0 vlan 1695 vlandev fxp1&quot;</span>
<span style="color: #666666; font-style: italic;">#Сам сервер ходит через модем №1</span>
<span style="color: #007800;">defaultrouter</span>=<span style="color: #ff0000;">&quot;192.169.1.1&quot;</span>
<span style="color: #007800;">setfib1_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">setfib1_defaultroute</span>=<span style="color: #ff0000;">&quot;192.169.1.1&quot;</span>
<span style="color: #007800;">setfib2_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">setfib2_defaultroute</span>=<span style="color: #ff0000;">&quot;192.169.2.1&quot;</span>
<span style="color: #007800;">setfib3_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">setfib3_defaultroute</span>=<span style="color: #ff0000;">&quot;192.169.3.1&quot;</span>
<span style="color: #007800;">setfib4_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">setfib4_defaultroute</span>=<span style="color: #ff0000;">&quot;192.169.4.1&quot;</span>
<span style="color: #666666; font-style: italic;">#Включаем шейпинг</span>
<span style="color: #007800;">dummynet_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #666666; font-style: italic;">#Включаем фаервол</span>
<span style="color: #007800;">firewall_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #007800;">firewall_logging</span>=<span style="color: #ff0000;">&quot;YES&quot;</span>
<span style="color: #666666; font-style: italic;">#Конфиг-файл фаервола</span>
<span style="color: #007800;">firewall_script</span>=<span style="color: #ff0000;">&quot;/usr/home/snake/net/rc.fire.conf&quot;</span></pre></div></div>

<p>Не забываем о маршрутизации:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Подсеть провайдера</span>
route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> 192.168.106.1
setfib <span style="color: #000000;">1</span> route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> 192.168.100.1
setfib <span style="color: #000000;">2</span> route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> 192.168.100.1
setfib <span style="color: #000000;">3</span> route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> 192.168.100.1
setfib <span style="color: #000000;">4</span> route add 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> 192.168.100.1</pre></div></div>

<p>Ну и теперь приступаем к настройкам фаервола:<br />
1, Запрещаем весь посторонний трафик</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;">#IPFW--------------------------------</span>
<span style="color: #007800;">fw</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw -q&quot;</span>
<span style="color: #007800;">fwa</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw -q add&quot;</span>
<span style="color: #666666; font-style: italic;">#Ifaces-----------------------------</span>
<span style="color: #007800;">lan</span>=<span style="color: #ff0000;">&quot;fxp0&quot;</span>
<span style="color: #007800;">lan2</span>=<span style="color: #ff0000;">&quot;fxp1&quot;</span>
<span style="color: #007800;">inet</span>=<span style="color: #ff0000;">&quot;vlan1691&quot;</span>
<span style="color: #007800;">inet2</span>=<span style="color: #ff0000;">&quot;vlan1692&quot;</span>
<span style="color: #007800;">inet3</span>=<span style="color: #ff0000;">&quot;vlan1693&quot;</span>
<span style="color: #007800;">inet4</span>=<span style="color: #ff0000;">&quot;vlan1694&quot;</span>
<span style="color: #007800;">ifnet</span>=<span style="color: #ff0000;">&quot;vlan1695&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Selfcare &amp; service</span>
<span style="color: #666666; font-style: italic;">##loopback (1000-1020)</span>
<span style="color: #007800;">$fwa</span> 01000 allow ip from any to any via lo0
<span style="color: #007800;">$fwa</span> 01010 deny ip from any to 127.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span>
<span style="color: #007800;">$fwa</span> 01020 deny ip from 127.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to any
<span style="color: #666666; font-style: italic;">##Разрешаем доступ к модемам, иначе ничего не увидим)</span>
<span style="color: #007800;">$fwa</span> 01040 allow ip from 192.169.1.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> 01050 allow ip from me to 192.169.1.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> out via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> 01060 allow ip from 192.169.2.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> 01070 allow ip from me to 192.169.2.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> out via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> 01080 allow ip from 192.169.3.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> 01090 allow ip from me to 192.169.3.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> out via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> 01100 allow ip from 192.169.4.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> 01110 allow ip from me to 192.169.4.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> out via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> 01120 allow ip from 192.169.5.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$ifnet</span>
<span style="color: #007800;">$fwa</span> 01130 allow ip from me to 192.169.5.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> out via <span style="color: #007800;">$ifnet</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Deny packets (2000-2999)</span>
<span style="color: #666666; font-style: italic;">##Через интерфейсы, смотрящие непосредственно в интернет, не должен проходить локальный траффик</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2000</span> deny log ip from 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2010</span> deny log ip from any to 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> out via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2020</span> deny log ip from 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2030</span> deny log ip from any to 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> out via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2040</span> deny log ip from 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2050</span> deny log ip from any to 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> out via <span style="color: #007800;">$inet</span>
&nbsp;
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2100</span> deny log ip from 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2110</span> deny log ip from any to 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> out via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2120</span> deny log ip from 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2130</span> deny log ip from any to 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> out via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2140</span> deny log ip from 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2150</span> deny log ip from any to 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> out via <span style="color: #007800;">$inet2</span>
&nbsp;
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2200</span> deny log ip from 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to me <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2210</span> deny log ip from any to 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> out via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2220</span> deny log ip from 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2230</span> deny log ip from any to 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> out via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2240</span> deny log ip from 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2250</span> deny log ip from any to 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> out via <span style="color: #007800;">$inet3</span>
&nbsp;
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2300</span> deny log ip from 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2310</span> deny log ip from any to 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> out via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2320</span> deny log ip from 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2330</span> deny log ip from any to 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> out via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2340</span> deny log ip from 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2350</span> deny log ip from any to 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span> out via <span style="color: #007800;">$inet4</span>
&nbsp;
<span style="color: #666666; font-style: italic;">##Через подсеть провайдера может проходить только &quot;свой&quot; трафик</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2300</span> deny log ip from 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$ifnet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2310</span> deny log ip from any to 10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span> out via <span style="color: #007800;">$ifnet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2410</span> deny log ip from 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> to any <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$ifnet</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">2420</span> deny log ip from any to 172.16.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12</span> out via <span style="color: #007800;">$ifnet</span></pre></div></div>

<p>3. Собственно, правила для выпускания в интернет</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;">#IPFW--------------------------------</span>
<span style="color: #007800;">fw</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw -q&quot;</span>
<span style="color: #007800;">fwa</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw -q add&quot;</span>
<span style="color: #666666; font-style: italic;">#Ifaces-----------------------------</span>
<span style="color: #007800;">lan</span>=<span style="color: #ff0000;">&quot;fxp0&quot;</span>
<span style="color: #007800;">lan2</span>=<span style="color: #ff0000;">&quot;fxp1&quot;</span>
<span style="color: #007800;">inet</span>=<span style="color: #ff0000;">&quot;vlan1691&quot;</span>
<span style="color: #007800;">inet2</span>=<span style="color: #ff0000;">&quot;vlan1692&quot;</span>
<span style="color: #007800;">inet3</span>=<span style="color: #ff0000;">&quot;vlan1693&quot;</span>
<span style="color: #007800;">inet4</span>=<span style="color: #ff0000;">&quot;vlan1694&quot;</span>
<span style="color: #007800;">ifvtk</span>=<span style="color: #ff0000;">&quot;vlan1695&quot;</span>
<span style="color: #666666; font-style: italic;">#IP groups--------------------------</span>
<span style="color: #666666; font-style: italic;">#Внутренняя сеть</span>
<span style="color: #007800;">hostel</span>=<span style="color: #ff0000;">&quot;10.0.0.0/24&quot;</span>
<span style="color: #007800;">net</span>=<span style="color: #ff0000;">&quot;192.168.0.0/16&quot;</span>
<span style="color: #666666; font-style: italic;">#Internet access</span>
<span style="color: #666666; font-style: italic;">##Stargazer</span>
<span style="color: #666666; font-style: italic;">###Интернет для пользователей в таблице 2</span>
<span style="color: #007800;">$fwa</span> 04141 allow ip from <span style="color: #ff0000;">&quot;table(2)&quot;</span> to not <span style="color: #007800;">$net</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$lan</span>
<span style="color: #007800;">$fwa</span> 04144 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(2)&quot;</span> out via <span style="color: #007800;">$lan</span>
<span style="color: #666666; font-style: italic;">###Внутрисеть для пользователей из табл. 3</span>
<span style="color: #007800;">$fwa</span> 04241 allow ip from <span style="color: #ff0000;">&quot;table(3)&quot;</span> to <span style="color: #007800;">$net</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$lan</span>
<span style="color: #007800;">$fwa</span> 04244 allow ip from <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(3)&quot;</span> out via <span style="color: #007800;">$lan</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#Выпускаем трафик..</span>
<span style="color: #666666; font-style: italic;">##Наружу</span>
<span style="color: #007800;">$fwa</span> 06010 allow ip from any to not <span style="color: #007800;">$vtk</span> out via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> 06020 allow ip from any to not <span style="color: #007800;">$vtk</span> out via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> 06030 allow ip from any to not <span style="color: #007800;">$vtk</span> out via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> 06040 allow ip from any to not <span style="color: #007800;">$vtk</span> out via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> 06050 allow ip from any to <span style="color: #007800;">$vtk</span> out via <span style="color: #007800;">$ifvtk</span>
&nbsp;
<span style="color: #666666; font-style: italic;">##Пропускаем внутрь) В таблицах 5-9 разбитые на группы пользователи</span>
<span style="color: #007800;">$fwa</span> 06210 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(5)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet</span>
<span style="color: #007800;">$fwa</span> 06220 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(6)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet2</span>
<span style="color: #007800;">$fwa</span> 06230 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(7)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet3</span>
<span style="color: #007800;">$fwa</span> 06240 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(8)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> 06250 allow ip from not <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(9)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$inet4</span>
<span style="color: #007800;">$fwa</span> 06260 allow ip from <span style="color: #007800;">$net</span> to <span style="color: #ff0000;">&quot;table(3)&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> via <span style="color: #007800;">$ifnet</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#----------------------------------</span>
<span style="color: #666666; font-style: italic;">##ICMP</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">60200</span> allow icmp from me to any
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">60250</span> allow icmp from any to me
<span style="color: #666666; font-style: italic;">##Allow all outcoming</span>
<span style="color: #007800;">$fwa</span> <span style="color: #000000;">65000</span> allow ip from me to any</pre></div></div>

<p>А теперь &#8211; самое интересное <img src='http://snake.khd.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Шейпинг:</p>
<pre>
#!/bin/sh
#<a href="http://snake.khd.ru/tag/ipfw/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ipfw">IPFW</a>--------------------------------
fw="/sbin/<a href="http://snake.khd.ru/tag/ipfw/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ipfw">ipfw</a> -q"
fwa="/sbin/<a href="http://snake.khd.ru/tag/ipfw/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ipfw">ipfw</a> -q add"
fwt="/sbin/<a href="http://snake.khd.ru/tag/ipfw/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ipfw">ipfw</a> table"
#Env---------------------------------
gw0="192.169.1.1"
gw1="192.169.1.1"
gw2="192.169.2.1"
gw3="192.169.3.1"
gw4="192.169.4.1"
gw5="192.169.5.1"
#Ifaces-----------------------------
lan="fxp0"
lan2="fxp1"
inet="vlan1691"
inet2="vlan1692"
inet3="vlan1693"
inet4="vlan1694"
ifnet="vlan1695"
#IP's-------------------------------
iplan="10.0.0.1"
ipnet="192.168.100.9"
#IP groups--------------------------
hostel="10.0.0.0/24"
net="192.168.0.0/16"
#Priority---------------------------
tcphigh=100
tcpother=40
udpall=20
ipall=20
tcp_ports="20,21,22,53,80,81,443,5190,5222,3128,8080,8081,8088,28960"
#Размер очереди прикидываем вот так:
#http://www.opennet.ru/tips/info/1411.shtml
#Queue size-------------------------
qdowni="350Kbytes"
qupi="50Kbytes"
qdownnet="550Kbytes"
qupnet="70Kbytes"
#Speed------------------------------
##Main outgoing queue
upi=500Kbit/s
##Main downloading queue
downi=3400Kbit/s
##NET outgoing queue
upnet=800Kbit/s
##net downloading queue
downnet=5000Kbit/s
#Пайпы (по одной на канал)
$fw pipe 100 config bw $downi queue $qdowni gred 0.002/10/30/0.1
$fw pipe 200 config bw $upi queue $qupi gred 0.002/10/30/0.1
$fw pipe 300 config bw $downi queue $qdowni gred 0.002/10/30/0.1
$fw pipe 400 config bw $upi queue $qupi gred 0.002/10/30/0.1
$fw pipe 500 config bw $downi queue $qdowni gred 0.002/10/30/0.1
$fw pipe 600 config bw $upi queue $qupi gred 0.002/10/30/0.1
$fw pipe 700 config bw $downi queue $qdowni gred 0.002/10/30/0.1
$fw pipe 800 config bw $upi queue $qupi gred 0.002/10/30/0.1
$fw pipe 900 config bw $downnet queue $qdownvtk gred 0.002/10/30/0.1
$fw pipe 1000 config bw $upnet queue $qupvtk gred 0.002/10/30/0.1
#-----------------------------------
</pre>
<pre>
#Очереди
#inet --> LAN
#Для различного типа трафика действует различный приоритет
$fw queue 101 config weight $tcphigh pipe 100 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 102 config weight $tcpother pipe 100 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 103 config weight $udpall pipe 100 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 104 config weight $ipall pipe 100 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff

$fw queue 301 config weight $tcphigh pipe 300 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 302 config weight $tcpother pipe 300 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 303 config weight $udpall pipe 300 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 304 config weight $ipall pipe 300 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff

$fw queue 501 config weight $tcphigh pipe 500 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 502 config weight $tcpother pipe 500 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 503 config weight $udpall pipe 500 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 504 config weight $ipall pipe 500 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff

$fw queue 701 config weight $tcphigh pipe 700 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 702 config weight $tcpother pipe 700 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 703 config weight $udpall pipe 700 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 704 config weight $ipall pipe 700 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff

#LAN --> inet
$fw queue 201 config weight $tcphigh pipe 200 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 202 config weight $tcpother pipe 200 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 203 config weight $udpall pipe 200 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 204 config weight $ipall pipe 200 gred 0.002/10/30/0.1 mask src-ip 0xffffffff

$fw queue 401 config weight $tcphigh pipe 400 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 402 config weight $tcpother pipe 400 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 403 config weight $udpall pipe 400 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 404 config weight $ipall pipe 400 gred 0.002/10/30/0.1 mask src-ip 0xffffffff

$fw queue 601 config weight $tcphigh pipe 600 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 602 config weight $tcpother pipe 600 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 603 config weight $udpall pipe 600 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 604 config weight $ipall pipe 600 gred 0.002/10/30/0.1 mask src-ip 0xffffffff

$fw queue 801 config weight $tcphigh pipe 800 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 802 config weight $tcpother pipe 800 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 803 config weight $udpall pipe 800 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 804 config weight $ipall pipe 800 gred 0.002/10/30/0.1 mask src-ip 0xffffffff

#WAN --> LAN
$fw queue 901 config weight $tcphigh pipe 900 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 902 config weight $tcpother pipe 900 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 903 config weight $udpall pipe 900 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff
$fw queue 904 config weight $ipall pipe 900 gred 0.002/10/30/0.1 mask dst-ip 0xffffffff

#LAN --> WAN
$fw queue 1001 config weight $tcphigh pipe 1000 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 1002 config weight $tcpother pipe 1000 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 1003 config weight $udpall pipe 1000 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
$fw queue 1004 config weight $ipall pipe 1000 gred 0.002/10/30/0.1 mask src-ip 0xffffffff
</pre>
<pre>
#-----------------------------------
#Настройки NAT
$fw nat 100 config if $inet same_ports reset deny_in
$fw nat 200 config if $inet2 same_ports reset deny_in
$fw nat 300 config if $inet3 same_ports reset deny_in
$fw nat 400 config if $inet4 same_ports reset deny_in
$fw nat 500 config if $ifnet same_ports reset deny_in
#-----------------------------------
##Routing tables
setfib 0 route delete default
setfib 0 route add default 192.169.1.1
###Clients route tables 1200-1599
setfib 1 route delete default
setfib 1 route add default 192.169.1.1
$fwa 01210 setfib 1 ip from "table(5)" to any in recv $lan
$fwa 01220 setfib 1 ip from "table(5)" to any in recv $vlan1204
$fwa 01230 setfib 1 ip from "table(5)" to any in recv $vlan1205
setfib 2 route delete default
setfib 2 route add default 192.169.2.1
$fwa 01310 setfib 2 ip from "table(6)" to any in recv $lan
$fwa 01320 setfib 2 ip from "table(6)" to any in recv $vlan1204
$fwa 01330 setfib 2 ip from "table(6)" to any in recv $vlan1205
setfib 3 route delete default
setfib 3 route add default 192.169.3.1
$fwa 01310 setfib 3 ip from "table(7)" to any in recv $lan
$fwa 01320 setfib 3 ip from "table(7)" to any in recv $vlan1204
$fwa 01330 setfib 3 ip from "table(7)" to any in recv $vlan1205
setfib 4 route delete default
setfib 4 route add default 192.169.4.1
$fwa 01410 setfib 4 ip from "table(8)" to any in recv $lan
$fwa 01420 setfib 4 ip from "table(8)" to any in recv $vlan1204
$fwa 01430 setfib 4 ip from "table(8)" to any in recv $vlan1205
###---Table 9 for limit tariff users
$fwa 01440 setfib 4 ip from "table(9)" to any in recv $lan
$fwa 01450 setfib 4 ip from "table(9)" to any in recv $vlan1204
$fwa 01460 setfib 4 ip from "table(9)" to any in recv $vlan1205
#-----------------------------------
</pre>
<pre>
#NAT &#038; queues
##Исходящие очереди
###ADSL1
$fwa 05011 queue 201 tcp from "table(5)" to any $tcp_ports out xmit $inet
$fwa 05012 queue 202 tcp from "table(5)" to not any $tcp_ports out xmit $inet
$fwa 05013 skipto 5110 tcp from "table(5)" to any out xmit $inet
$fwa 05014 queue 203 udp from "table(5)" to any out xmit $inet
$fwa 05015 skipto 5110 udp from "table(5)" to any out xmit $inet
$fwa 05016 queue 201 icmp from "table(5)" to any out xmit $inet
$fwa 05017 skipto 5110 icmp from "table(5)" to any out xmit $inet
$fwa 05018 queue 204 ip from "table(5)" to any out xmit $inet
###ADSL2
$fwa 05021 queue 401 tcp from "table(6)" to any $tcp_ports out xmit $inet2
$fwa 05022 queue 402 tcp from "table(6)" to not any $tcp_ports out xmit $inet2
$fwa 05023 skipto 5120 tcp from "table(6)" to any out xmit $inet2
$fwa 05024 queue 403 udp from "table(6)" to any out xmit $inet2
$fwa 05025 skipto 5120 udp from "table(6)" to any out xmit $inet2
$fwa 05026 queue 401 icmp from "table(6)" to any out xmit $inet2
$fwa 05027 skipto 5120 icmp from "table(6)" to any out xmit $inet2
$fwa 05028 queue 404 ip from "table(6)" to any out xmit $inet2
###ADSL3
$fwa 05031 queue 601 tcp from "table(7)" to any $tcp_ports out xmit $inet3
$fwa 05032 queue 602 tcp from "table(7)" to not any $tcp_ports out xmit $inet3
$fwa 05033 skipto 5130 tcp from "table(7)" to any out xmit $inet3
$fwa 05034 queue 603 udp from "table(7)" to any out xmit $inet3
$fwa 05035 skipto 5130 udp from "table(7)" to any out xmit $inet3
$fwa 05036 queue 601 icmp from "table(7)" to any out xmit $inet3
$fwa 05037 skipto 5130 icmp from "table(7)" to any out xmit $inet3
$fwa 05038 queue 604 ip from "table(7)" to any out xmit $inet3
###ADSL4
$fwa 05041 queue 801 tcp from "table(8)" to any $tcp_ports out xmit $inet4
$fwa 05042 queue 802 tcp from "table(8)" to not any $tcp_ports out xmit $inet4
$fwa 05043 skipto 5140 tcp from "table(8)" to any out xmit $inet4
$fwa 05044 queue 803 udp from "table(8)" to any out xmit $inet4
$fwa 05045 skipto 5140 udp from "table(8)" to any out xmit $inet4
$fwa 05046 queue 801 icmp from "table(8)" to any out xmit $inet4
$fwa 05047 skipto 5140 icmp from "table(8)" to any out xmit $inet4
$fwa 05048 queue 804 ip from "table(8)" to any out xmit $inet4
###Юзвери, сидящие на лимитированных тарифах обслуживаются в первую очередь
$fwa 05051 queue 801 ip from "table(9)" to any out xmit $inet4
###ADSL5
$fwa 05061 queue 1001 tcp from "table(3)" to $net $tcp_ports out xmit $ifnet
$fwa 05062 queue 1002 tcp from "table(3)" to not $net $tcp_ports out xmit $ifnet
$fwa 05063 skipto 5150 tcp from "table(3)" to any out xmit $ifnet
$fwa 05064 queue 1003 udp from "table(3)" to $net out xmit $ifnet
$fwa 05065 skipto 5150 udp from "table(3)" to any out xmit $ifnet
$fwa 05066 queue 1004 icmp from "table(3)" to $net out xmit $ifnet
$fwa 05067 skipto 5150 icmp from "table(3)" to any out xmit $ifnet
$fwa 05068 queue 1004 ip from "table(3)" to $net out xmit $ifnet
</pre>
<pre>
#-----------------------------------
##NAT
$fwa 05110 nat 100 ip from any to any via $inet
$fwa 05120 nat 200 ip from any to any via $inet2
$fwa 05130 nat 300 ip from any to any via $inet3
$fwa 05140 nat 400 ip from any to any via $inet4
$fwa 05150 nat 500 ip from any to any via $ifnet
#----------------------------------
##Incoming queues
$fwa 05311 queue 101 tcp from any $tcp_ports to "table(5)" in recv $inet
$fwa 05312 queue 102 tcp from not any $tcp_ports to "table(5)" in recv $inet
$fwa 05313 skipto 6010 tcp from any to "table(5)" in via $inet
$fwa 05314 queue 103 udp from any to "table(5)" in recv $inet
$fwa 05315 skipto 6010 udp from any to "table(5)" in via $inet
$fwa 05316 queue 101 icmp from any to "table(5)" in recv $inet
$fwa 05317 skipto 6010 icmp from any to "table(5)" in via $inet
$fwa 05318 queue 104 ip from any to "table(5)" in recv $inet

$fwa 05321 queue 301 tcp from any $tcp_ports to "table(6)" in recv $inet2
$fwa 05322 queue 302 tcp from not any $tcp_ports to "table(6)" in recv $inet2
$fwa 05323 skipto 6010 tcp from any to "table(6)" in via $inet2
$fwa 05324 queue 303 udp from any to "table(6)" in recv $inet2
$fwa 05325 skipto 6010 udp from any to "table(6)" in via $inet2
$fwa 05326 queue 301 icmp from any to "table(6)" in recv $inet2
$fwa 05327 skipto 6010 icmp from any to "table(6)" in via $inet2
$fwa 05328 queue 304 ip from any to "table(6)" in recv $inet2

$fwa 05331 queue 501 tcp from any $tcp_ports to "table(7)" in recv $inet3
$fwa 05332 queue 502 tcp from not any $tcp_ports to "table(7)" in recv $inet3
$fwa 05333 skipto 6010 tcp from any to "table(7)" in via $inet3
$fwa 05334 queue 503 udp from any to "table(7)" in recv $inet3
$fwa 05335 skipto 6010 udp from any to "table(7)" in via $inet3
$fwa 05336 queue 501 icmp from any to "table(7)" in recv $inet3
$fwa 05337 skipto 6010 icmp from any to "table(7)" in via $inet3
$fwa 05338 queue 504 ip from any to "table(7)" in recv $inet3

$fwa 05341 queue 701 tcp from any $tcp_ports to "table(8)" in recv $inet4
$fwa 05342 queue 702 tcp from not any $tcp_ports to "table(8)" in recv $inet4
$fwa 05347 skipto 6010 tcp from any to "table(8)" in via $inet4
$fwa 05343 queue 703 udp from any to "table(8)" in recv $inet4
$fwa 05347 skipto 6010 udp from any to "table(8)" in via $inet4
$fwa 05344 queue 701 icmp from any to "table(8)" in recv $inet4
$fwa 05347 skipto 6010 icmp from any to "table(8)" in via $inet4
$fwa 05345 queue 704 ip from any to "table(8)" in recv $inet4

$fwa 05351 queue 701 ip from any to "table(9)" in recv $inet4
$fwa 05352 skipto 6010 ip from any to "table(9)" in via $inet4

$fwa 05361 queue 901 tcp from $net $tcp_ports to "table(3)" in recv $ifnet
$fwa 05362 queue 902 tcp from not $net $tcp_ports to "table(3)" in recv $ifnet
$fwa 05367 skipto 6010 tcp from $net to "table(3)" in via $ifnet
$fwa 05363 queue 903 udp from $net to "table(3)" in recv $ifnet
$fwa 05367 skipto 6010 udp from $net to "table(3)" in via $ifnet
$fwa 05364 queue 901 icmp from $net to "table(3)" in recv $ifnet
$fwa 05367 skipto 6010 icmp from $net to "table(3)" in via $ifnet
$fwa 05365 queue 904 ip from $vtk to "table(3)" in recv $ifnet
</pre>
<p>Такая схема работает более или менее успешно. Пользователи распихиваются по таблицам примерно поровну, после чего за каждой группой пользователей закрепляется &#8220;свой&#8221; канал.<br />
Все вопросы можно задавать тут)</p>
]]></content:encoded>
			<wfw:commentRss>http://snake.khd.ru/2011/01/operaciya-kooperaciya-ipfw-stargazer-i-4-adsl-soedineniya-chast-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#!/bin/bash для чайников:))</title>
		<link>http://snake.khd.ru/2009/10/binbash-dlya-chajnikov/</link>
		<comments>http://snake.khd.ru/2009/10/binbash-dlya-chajnikov/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 15:04:31 +0000</pubDate>
		<dc:creator>onion</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[stargazer]]></category>

		<guid isPermaLink="false">http://snake.khd.ru/?p=132</guid>
		<description><![CDATA[Многие пользователи часто сталкиваются с выполнением рутинных операций. Будь то каждодневное монтирование диска при запуске системы или запуск приложения с одними и теми же параметрами. Все эти операции можно с легкостью выполнить множеством способов. В рамках данного мануала я покажу один из способов автоматизации рутинных операций с помощью shell-скриптов на примере конкретной задачи. Но для <a href='http://snake.khd.ru/2009/10/binbash-dlya-chajnikov/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Многие пользователи часто сталкиваются с выполнением рутинных операций. Будь то каждодневное монтирование диска при запуске системы или запуск приложения с одними и теми же параметрами. Все эти операции можно с легкостью выполнить множеством способов.<br />
В рамках данного мануала я покажу один из способов автоматизации рутинных операций с помощью <a href="http://snake.khd.ru/tag/shell-skripty/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  shell">shell</a>-скриптов на примере конкретной задачи.<span id="more-132"></span> Но для начала немного теории.</p>
<p>Итак, что же такое shell-скрипты и как их поставить себе на вооружение?</p>
<p>Shell &#8212; это командная оболочка. Но еще это и мощный язык программирования. Программы на языке shell называют сценариями, или скриптами. Для использования в скриптах доступен полный набор команд, утилит и программ UNIX и плюс внутренние команды shell &#8212; условные операторы, операторы циклов и пр., которые увеличивают мощь и гибкость сценариев. </p>
<p>Структуру скрипта можно описать в семи словах следующим образом: «вызов командного интерпретатора — тело скрипта — завершение скрипта». Пишутся скрипты с помощью  любого текстового редактора, сохраняются они как текстовые файлы. Но, чтобы было удобнее, я сохраняю их с расширением «*.sh». Но давайте посмотрим на все это на примере конкретной задачи.</p>
<p>Итак, постановка задачи. Есть приложение, которое требуется запускать с довольно большим набором параметров. Запускать придется часто, а каждый раз вводить эти параметры лень:)) Чтоб было нагляднее, посмотрим, как выглядит это действие:</p>
<p><em>/home/Admin/<a href="http://snake.khd.ru/tag/soft/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  soft">soft</a>/sgconf/sgconf -s 10.10.10.1 -p 5555 -a Admin -w 112233 -u user -c 100</em></p>
<p>Что же делает эта команда? Вкратце опишу ситуацию. Есть сервер, раздающий интернет пользователям. Пользователи сидят в инете  по цене n рублей за мегабайт. Когда средства на балансе заканчиваются, юзеры приносят деньги, администратор начисляет их им на баланс и пользователи могут снова сидеть в инете за n руб/метр. Сервер находится по адресу  10.10.10.1, порт сервера — 5555, администратора зовут Admin, его пароль — 112233. Требуется на пользователя user положить 100 рублей.  Первые 4 параметра — адрес и порт сервера, логин и пароль администратора будут неизменными, а последние два — имя юзера и сумма платежа буду каждый раз разными. Соответственно, нам нет нужды каждый раз вводить 4 неизменных параметра, можно жестко прописать их в теле скрипта, а последние 2 — у нас будут переменными.</p>
<p>Приступим непосредственно к написанию скрипта.</p>
<p>Что же должен делать скрипт? Считывать две переменные(назовем их «user» и «cash»), подставлять их в параметры запуска и запускать приложение. В принципе, все, но так как разработчиками приложения не были предусмотрены некоторые полезные функции, мы можем сами добавить их. Например, мне было бы очень удобно, если бы у меня велся лог пополнений баланса.</p>
<p>Открываем текстовый редактор и пишем код.</p>
<p>Первым делом нам нужен вызов интерпретатора. Для данного скрипта будем использовать интерпретатор bash.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span></pre></div></div>

<p>Далее добавим небольшое описание того, что требуется сделать пользователю. Вывод текста осуществляется командой echo. Параметром данной команды является сам текст, который нужно вывести. Пользователь вводит значение переменной, которую считывает оператор read. Параметром этой команды является имя переменной, значение которой задает пользователь. Выглядит это так:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">--------</span> sgconf.sh v <span style="color: #000000;">0.1</span> <span style="color: #660033;">--------</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> Имя пользователя:
&nbsp;
	<span style="color: #c20cb9; font-weight: bold;">read</span> user
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> Сумма платежа:
&nbsp;
	<span style="color: #c20cb9; font-weight: bold;">read</span> cash
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">---------------------------------</span></pre></div></div>

<p>Первая и последняя строки добавлены для удобства пользователя, чтобы было видно, где начинается выполнение скрипта.<br />
Этого кода достаточно, чтобы скрипт выполнял свою основную задачу — запуск приложения с параметрами. Добавим эту операцию с учетом введенных переменных:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>soft<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf <span style="color: #660033;">-s</span> 10.10.10.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">5555</span> <span style="color: #660033;">-a</span> Admin <span style="color: #660033;">-w</span> <span style="color: #000000;">112233</span> <span style="color: #660033;">-u</span> <span style="color: #007800;">$user</span> <span style="color: #660033;">-c</span> <span style="color: #007800;">$cash</span></pre></div></div>

<p>Обратите внимание, что вызов переменной обозначается знаком «<strong>$</strong>», т.е если имя переменной указано со знаком $, то мы обращаемся к ее значению.</p>
<p>Все, теперь нам не нужно каждый раз запускать программу с длиннющими параметрами. Запускаем скрипт, вводим имя плательщика, платеж и все. Но мы договорились еще и вести логи. Займемся решением этой задачи.</p>
<p>Логи у нас будут лежать в виде файла sgconf.log, находящимся в удобной для нас папке. Что нужно для ведения нормальных логов? Во-первых — отметка о выполненной операции, во-вторых — время, когда эта операция была выполнена. Наша операция — это платеж, проведенный на имя пользователя. То есть запись будет иметь следующий формат:</p>
<blockquote><p>Баланс пользователя &#8220;$user&#8221; пополнен на &#8220;$cash&#8221; рублей в $time</p></blockquote>
<p>И если с переменными $user и $cash мы уже разобрались, то откуда берется значение переменной time? </p>
<p>В консоли линукса есть очень полезный оператор, который показывает нам точное время. Вот это точное время мы и будем использовать в качестве значения переменной time. Делается это просто:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">time</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

<p>То есть переменная определяется как результат, возвращаемый оператором date.</p>
<p>Теперь разберемся с записью файла sgconf.log. Если он уже существует, то в конце добавим новую запись, если нет — то создадим его и внесем туда данные о нашей операции.</p>
<p>Текст, который будем вносить в логи будет таким:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">text</span>=<span style="color: #ff0000;">&quot;Баланс пользователя &quot;</span><span style="color: #007800;">$user</span><span style="color: #ff0000;">&quot; пополнен на &quot;</span><span style="color: #007800;">$cash</span><span style="color: #ff0000;">&quot; рублей в <span style="color: #007800;">$time</span>&quot;</span></pre></div></div>

<p>Переменная text меняется в зависимости от переменных user, cash и time</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-e</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log <span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log 
&nbsp;
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log
&nbsp;
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>Проверка условия производится с помощью конструкции <em>if — then — else — fi</em>. Если выполняется условие, заданное в квадратных скобках, то выполняем один код, если это условие не выполняется — другой, затем заканчиваем проверку.</p>
<p>Конструкция <em>[ -e /home/Admin/scripts/sgconf/sgconf.log ]</em><br />
  &#8211; это проверка существования файла /home/Admin/scripts/sgconf/sgconf.log, об этом говорит операция <strong>-e</strong>: если файл существует, она возвращает значение true и выполняется код  <em>echo $text &gt;&gt; /home/Admin/scripts/sgconf/sgconf.log</em>. Если он не существует — то код <em>echo $text &gt; /home/Admin/scripts/sgconf/sgconf.log</em> В первом случае мы добавляем значение переменной text в конец файла(это делается с помощью символа « <strong>&gt;&gt;</strong> »), во втором случае — мы записываем значение text в новый файл(« <strong>&gt;</strong> »).</p>
<p>Все, теперь завершаем наш скрипт командой <em>exit</em>.<br />
Сохраняем код в любое удобное место под именем «sgconf.sh» и пользуемся.</p>
<p>Полный код скрипта выглядит так:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#************************************************#</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#                  sgconf.sh                     #</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#           autor: Sergey Kondrashov             #</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#                 10 25, 2009                    #</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#                                                #</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#    how to use sgconfig without hemorrhoids     #</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#************************************************#</span>
&nbsp;
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">--------</span> sgconf.sh v <span style="color: #000000;">0.1</span> <span style="color: #660033;">--------</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> Имя пользователя:
&nbsp;
	<span style="color: #c20cb9; font-weight: bold;">read</span> user
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> Сумма платежа:
&nbsp;
	<span style="color: #c20cb9; font-weight: bold;">read</span> cash
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">---------------------------------</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>soft<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf <span style="color: #660033;">-s</span> 10.10.10.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">5555</span> <span style="color: #660033;">-a</span> Admin <span style="color: #660033;">-w</span> <span style="color: #000000;">112233</span> <span style="color: #660033;">-u</span> <span style="color: #007800;">$user</span> <span style="color: #660033;">-c</span> <span style="color: #007800;">$cash</span>
&nbsp;
<span style="color: #007800;">time</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
<span style="color: #007800;">text</span>=<span style="color: #ff0000;">&quot;Баланс пользователя &quot;</span><span style="color: #007800;">$user</span><span style="color: #ff0000;">&quot; пополнен на &quot;</span><span style="color: #007800;">$cash</span><span style="color: #ff0000;">&quot; рублей в <span style="color: #007800;">$time</span>&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-e</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log <span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log 
&nbsp;
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log
&nbsp;
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exit</span></pre></div></div>

<p>Теперь, когда нам нужно положить кому-нибудь денежку, мы запускаем скрипт командой «sh sgconf.sh», вводим имя плательщика и сумму платежа. Никаких длинных строчек, никакой головной боли с постоянным вводом одних и тех же значений.</p>
<p>Но на этом я не остановился. Мне показалось неудобным то, что функционал программы предусматривает гораздо больше операций, нежели просто пополнение баланса. Коды этих операций передаются программе так же с помощью параметров. А используя приведенный выше способ, мне пришлось бы писать отдельный скрипт под каждую операцию, что было бы не слишком удобно. Выход очевиден: запуск скрипта с параметрами, которые будут переданы программе. Делается это еще проще, чем то, что мы сделали раньше.</p>
<p>За считывание параметров запуска отвечает переменная &#8220;@&#8221;. То есть, если мы запускаем скрипт с параметрами, они будут сохранены в эту переменную:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sh</span> sgconf.sh <span style="color: #660033;">-u</span> user <span style="color: #660033;">-c</span> <span style="color: #000000;">100</span></pre></div></div>

<p>Теперь мы просто подставим значение этой переменной в команду, выполняемую скриптом:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>soft<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf <span style="color: #660033;">-s</span> 10.10.10.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">5555</span> <span style="color: #660033;">-a</span> Admin <span style="color: #660033;">-w</span> <span style="color: #000000;">112233</span> <span style="color: #ff0000;">&quot;$@&quot;</span></pre></div></div>

<p>Все! Согласитесь, это куда более удобно, чем то, что было раньше.</p>
<p>Дальше нам нужно подправить ведение логов. Для этого просто редактируем переменную text:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">text</span>=<span style="color: #ff0000;">&quot;$@&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$time</span>&quot;</span></pre></div></div>

<p>Таким образом, мы сможем в логах видеть не только имя плательщика, и сумму денег, внесенную им, но и код операции, будь то платеж или кредит и т.д.</p>
<p>Полный код второй версии скрипта выглядит так:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#************************************************#</span>
<span style="color: #666666; font-style: italic;">#                  sgconf.sh                     #</span>
<span style="color: #666666; font-style: italic;">#           autor: Sergey Kondrashov             #</span>
<span style="color: #666666; font-style: italic;">#                 10 25, 2009                    #</span>
<span style="color: #666666; font-style: italic;">#                                                #</span>
<span style="color: #666666; font-style: italic;">#    how to use sgconfig without hemorrhoids     #</span>
<span style="color: #666666; font-style: italic;">#************************************************#</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> sgconf.sh v <span style="color: #000000;">0.2</span>
<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>Admin<span style="color: #000000; font-weight: bold;">/</span>soft<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf <span style="color: #660033;">-s</span> 10.10.10.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">5555</span> <span style="color: #660033;">-a</span> Admin <span style="color: #660033;">-w</span> <span style="color: #000000;">112233</span> <span style="color: #ff0000;">&quot;$@&quot;</span>
<span style="color: #007800;">time</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">text</span>=<span style="color: #ff0000;">&quot;$@&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$time</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-e</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>onion<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log <span style="color: #7a0874; font-weight: bold;">&#93;</span>
	<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>onion<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log 
	<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$text</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>onion<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>sgconf<span style="color: #000000; font-weight: bold;">/</span>sgconf.log
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">exit</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://snake.khd.ru/2009/10/binbash-dlya-chajnikov/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Посчитаем все! Stargazer как биллинг для небольшой локалки</title>
		<link>http://snake.khd.ru/2009/10/poschitaem-vse-stargazer-kak-billing-dlya-nebolshoj-lokalki/</link>
		<comments>http://snake.khd.ru/2009/10/poschitaem-vse-stargazer-kak-billing-dlya-nebolshoj-lokalki/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 10:09:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[billng]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[stargazer]]></category>

		<guid isPermaLink="false">http://snake.khd.ru/?p=93</guid>
		<description><![CDATA[Имеется: сервер на freebsd 7.2, две безлимитных линии, две группы пользователей Задача &#8211; контролировать платежи пользователей за интернет. Для начала нам понадобится биллинг &#8211; программа, которая будет считать трафик пользователя, осуществлять авторизацию и считать абонку. В моем случае это Stargazer Для установки нам потребуются оболочка bash и библиотека expat. Распаковываем архив, идем в projects/stargazer. Выполняем: <a href='http://snake.khd.ru/2009/10/poschitaem-vse-stargazer-kak-billing-dlya-nebolshoj-lokalki/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Имеется: сервер на <a href="http://snake.khd.ru/tag/freebsd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FreeBSD">freebsd</a> 7.2, две безлимитных линии, две группы пользователей<br />
Задача &#8211; контролировать платежи пользователей за интернет.<br />
<span id="more-93"></span><br />
Для начала нам понадобится биллинг &#8211; программа, которая будет считать трафик пользователя, осуществлять авторизацию и считать абонку. В моем случае это <a href="http://www.stargazer.dp.ua/download.php" target="_blank">Stargazer</a></p>
<p>Для установки нам потребуются оболочка bash и библиотека expat.<br />
Распаковываем архив, идем в projects/<a href="http://snake.khd.ru/tag/stargazer/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  stargazer">stargazer</a>.<br />
Выполняем:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#./build</span>
<span style="color: #666666; font-style: italic;">#gmake install</span></pre></div></div>

<p>Если все прошло успешно, то в /etc/stargazer появятся  файлы rules, stargazer.conf и скрипты пользователей</p>
<p>Начнем по порядку:<br />
<strong>rules</strong> содержит список подсетей и направлений. По каждому направлению может быть свой тариф и свои правила подсчета.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ALL     192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">16</span>  DIR1 <span style="color: #666666; font-style: italic;">#направление 1 - локалка</span>
ALL     10.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span>      DIR2 <span style="color: #666666; font-style: italic;"># направление 2 - городская сеть</span>
ALL     0.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0</span>       DIR0 <span style="color: #666666; font-style: italic;"># направление 3 - инет</span></pre></div></div>

<p><strong>stargazer.conf</strong> &#8211; основной конфигурационный файл</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">################################################################################</span>
<span style="color: #666666; font-style: italic;">#                        Файл настроек сервера stargazer                       #</span>
<span style="color: #666666; font-style: italic;">################################################################################</span>
<span style="color: #666666; font-style: italic;"># Имя лог-файла куда пишутся события</span>
LogFile = <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>stargazer.log
&nbsp;
<span style="color: #666666; font-style: italic;"># Имя PID-файла куда пишется идентификатор процесса</span>
<span style="color: #666666; font-style: italic;"># По умолчанию /var/run/pid</span>
<span style="color: #666666; font-style: italic;"># PIDFile = /var/run/stargazer.pid</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Имя файла в котором определяются правила подсчета трафика</span>
Rules = <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>stargazer<span style="color: #000000; font-weight: bold;">/</span>rules
&nbsp;
<span style="color: #666666; font-style: italic;"># Время через которое пишется d БД детальная статистика пользователя</span>
<span style="color: #666666; font-style: italic;"># Значения: 1, 1/2, 1/4, 1/6.</span>
<span style="color: #666666; font-style: italic;"># 1 - раз в чаc, 1/2 - раз в пол часа, 1/4 - раз в 15 мин, 1/6 - раз в 10 мин</span>
<span style="color: #007800;">DetailStatWritePeriod</span>=<span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">6</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Периодичность записи записи в БД информации о статистике пользователя (минуты)</span>
<span style="color: #666666; font-style: italic;"># При большом кол-ве пользователей эту величину стоит увеличить, т.к.</span>
<span style="color: #666666; font-style: italic;"># запись в БД может занимать длительное время.</span>
<span style="color: #666666; font-style: italic;"># Значения: 1...1440 (минуты)</span>
StatWritePeriod = <span style="color: #000000;">10</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># День снятия абонплаты</span>
<span style="color: #666666; font-style: italic;"># Значения: 0...31. 0 - Последний день месяца</span>
DayFee = <span style="color: #000000;">1</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Абонплата снимается в последний (yes) или первый (no) день учетного периода.</span>
<span style="color: #666666; font-style: italic;"># Это влияет на то, как будет снята абонплата (АП) при переходе на новый тариф.</span>
<span style="color: #666666; font-style: italic;"># Если у пользователя был тариф A с АП=100 и он хочет перейти на тариф B с АП=200,</span>
<span style="color: #666666; font-style: italic;"># то при переходе на новый тариф со счета пользователя снимется 100, если</span>
<span style="color: #666666; font-style: italic;"># DayFeeIsLastDay = yes и 200, если DayFeeIsLastDay = no</span>
DayFeeIsLastDay = <span style="color: #c20cb9; font-weight: bold;">yes</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># День сброса данных о трафике за месяц и день перехода пользователей на новые тарифы</span>
<span style="color: #666666; font-style: italic;"># Значения: 0...31. 0 - Последний день месяца</span>
DayResetTraff = <span style="color: #000000;">1</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># &quot;Размазанное&quot; снятие абонплаты. Снятие АП не раз в месяц, а каждый</span>
<span style="color: #666666; font-style: italic;"># день 1/30 или 1/31 части АП</span>
<span style="color: #666666; font-style: italic;"># Значения: yes, no</span>
SpreadFee = no
&nbsp;
<span style="color: #666666; font-style: italic;"># Данная опция определяет может ли пользователь получить доступ в интерент</span>
<span style="color: #666666; font-style: italic;"># если у него на счету нет денег, но остался предоплаченный трафик</span>
<span style="color: #666666; font-style: italic;"># Значения: yes, no</span>
FreeMbAllowInet = no
&nbsp;
<span style="color: #666666; font-style: italic;"># Эта опция определяет что будет писаться в стоимость трафика в detail_stat.</span>
<span style="color: #666666; font-style: italic;"># Если у пользователя еще есть предоплаченный трафик и WriteFreeMbTraffCost = no,</span>
<span style="color: #666666; font-style: italic;"># то в detail_stat стоимость будет 0. Если у пользователя уже нет</span>
<span style="color: #666666; font-style: italic;"># предоплаченного трафика и WriteFreeMbTraffCost = no, то в detail_stat</span>
<span style="color: #666666; font-style: italic;"># будет записана стоиость трафика. При WriteFreeMbTraffCost = yes стоимость</span>
<span style="color: #666666; font-style: italic;"># трафика будет записана в любом случае.</span>
WriteFreeMbTraffCost = no
&nbsp;
<span style="color: #666666; font-style: italic;"># Названия направлений. Направления без названий не будут отображаться в</span>
<span style="color: #666666; font-style: italic;"># авторизаторе и конфигураторе. Названия состоящие из нескольких слов должны</span>
<span style="color: #666666; font-style: italic;"># быть взяты в кавычки</span>
<span style="color: #666666; font-style: italic;"># Я использовал только одно направление - Интернет. (&lt;em&gt;прим. Snake&lt;/em&gt;)</span>
<span style="color: #000000; font-weight: bold;">&lt;</span>DirNames<span style="color: #000000; font-weight: bold;">&gt;</span>
    DirName0 = Internet
    <span style="color: #666666; font-style: italic;">#DirName1 = Город</span>
    <span style="color: #666666; font-style: italic;">#DirName2 = Локаль</span>
<span style="color: #000000; font-weight: bold;">&lt;/</span>DirNames<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Кол-во запускаемых процессов stg-exec.</span>
<span style="color: #666666; font-style: italic;"># Эти процессы отвечают за выполнение скриптов OnConnect, OnDisconnect, ...</span>
<span style="color: #666666; font-style: italic;"># Кол-во процессов означает сколько скриптов могут выполнятся одновременно.</span>
<span style="color: #666666; font-style: italic;"># Значения: 1...1024</span>
ExecutersNum = <span style="color: #000000;">1</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Message Key для stg-exec.</span>
<span style="color: #666666; font-style: italic;"># Идентификатор очереди сообщений для выполнятеля скриптов.</span>
<span style="color: #666666; font-style: italic;"># Его изменение может понадобится если есть необходимость запустить несколько</span>
<span style="color: #666666; font-style: italic;"># экземпляров stg. Если вы не понимаете, что это, не трогайте этот параметр!</span>
<span style="color: #666666; font-style: italic;"># Значения: 0...2^32</span>
<span style="color: #666666; font-style: italic;"># Значение по умолчанию: 5555</span>
<span style="color: #666666; font-style: italic;"># ExecMsgKey = 5555</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Путь к директории, в которой находятся модули сервера</span>
ModulesPath = <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>stg
&nbsp;
<span style="color: #666666; font-style: italic;"># Определяет директорию, в которой будут находится файлы &quot;монитора&quot;</span>
<span style="color: #666666; font-style: italic;"># работы сервера. В этой директории будут созданы пустые файлы, время </span>
<span style="color: #666666; font-style: italic;"># модификации которых будет меняться примерно раз в минуту. Если какой-то </span>
<span style="color: #666666; font-style: italic;"># компонент сервера зависнет, файл(ы) перестанет обновлятся, и по этому </span>
<span style="color: #666666; font-style: italic;"># признаку можно определить сбой в работе сервера и при надобности </span>
<span style="color: #666666; font-style: italic;"># перезапустить. Если параметр не указан или пустой, мониторинг производится </span>
<span style="color: #666666; font-style: italic;"># не будет. Параметр не является обязательным, по умолчанию пустой.</span>
<span style="color: #666666; font-style: italic;"># MonitorDir=/var/stargazer/monitor</span>
&nbsp;
<span style="color: #666666; font-style: italic;">################################################################################</span>
<span style="color: #666666; font-style: italic;"># Store module</span>
<span style="color: #666666; font-style: italic;"># Настройки плагина работающего с БД сервера</span>
<span style="color: #666666; font-style: italic;"># Выберите нужный модуль хранения статистики (БД или файлы). Должен быть активен только один модуль!</span>
<span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
<span style="color: #666666; font-style: italic;"># Т.е. полное имя модуля mod_store_files.so</span>
<span style="color: #000000; font-weight: bold;">&lt;</span>StoreModule store_files<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Рабочая директория сервера, тут содержатся данные о тарифах, пользователях,</span>
    <span style="color: #666666; font-style: italic;"># администраторах и т.д.</span>
    WorkDir = <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>stargazer
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;"># Владелец, группа и права доступа на файлы статистики (stat) пользователя</span>
    ConfOwner = root
    ConfGroup = wheel
    ConfMode = <span style="color: #000000;">600</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;"># Владелец, группа и права доступа на файлы конфигурации (conf) пользователя</span>
    StatOwner = root
    StatGroup = wheel
    StatMode = <span style="color: #000000;">640</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Владелец, группа и права доступа на лог-файлы (log) пользователя</span>
    UserLogOwner = root
    UserLogGroup = wheel
    UserLogMode = <span style="color: #000000;">640</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Удалять резервные копии после успешной записи conf/stat</span>
    <span style="color: #666666; font-style: italic;"># Значения: yes, no</span>
    <span style="color: #666666; font-style: italic;"># По умолчанию: yes</span>
    <span style="color: #666666; font-style: italic;"># RemoveBak = yes</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Восстанавливать файлы conf/stat из резервных копий при ошибке чтения</span>
    <span style="color: #666666; font-style: italic;"># Значения: yes, no</span>
    <span style="color: #666666; font-style: italic;"># По умолчанию: no</span>
    <span style="color: #666666; font-style: italic;"># ReadBak = no</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;/</span>StoreModule<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#&lt;StoreModule store_firebird&gt;</span>
<span style="color: #666666; font-style: italic;">#    # Адрес сервера БД</span>
<span style="color: #666666; font-style: italic;">#    server=localhost</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Путь к БД на сервере или ее алиас</span>
<span style="color: #666666; font-style: italic;">#    database=/var/stg/stargazer.fdb</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Имя пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    user=stg</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Пароль пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    password=123456</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Уровень изоляции транзаций (не обязательно, по умолчанию oncurrency):</span>
<span style="color: #666666; font-style: italic;">#    #  concurrency</span>
<span style="color: #666666; font-style: italic;">#    #  dirtyRead</span>
<span style="color: #666666; font-style: italic;">#    #  readCommitted</span>
<span style="color: #666666; font-style: italic;">#    #  consistency</span>
<span style="color: #666666; font-style: italic;">#    isolationLevel=concurrency</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Действия при блокировках (не обязательно, по умолчанию wait):</span>
<span style="color: #666666; font-style: italic;">#    #  wait</span>
<span style="color: #666666; font-style: italic;">#    #  noWait</span>
<span style="color: #666666; font-style: italic;">#    lockResolution=wait</span>
<span style="color: #666666; font-style: italic;">#&lt;/StoreModule&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#&lt;StoreModule store_postgresql&gt;</span>
<span style="color: #666666; font-style: italic;">#    # Адрес сервера БД</span>
<span style="color: #666666; font-style: italic;">#    server=localhost</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Имя БД</span>
<span style="color: #666666; font-style: italic;">#    database=stargazer</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Имя пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    user=stg</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Пароль пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    password=123456</span>
<span style="color: #666666; font-style: italic;">#&lt;/StoreModule&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#&lt;StoreModule store_mysql&gt;</span>
<span style="color: #666666; font-style: italic;">#    # Имя пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    dbuser = stg</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Пароль пользователя БД</span>
<span style="color: #666666; font-style: italic;">#    rootdbpass = 123456</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Имя БД на сервере</span>
<span style="color: #666666; font-style: italic;">#    dbname = stg</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    # Адрес сервера БД</span>
<span style="color: #666666; font-style: italic;">#    dbhost = localhost</span>
<span style="color: #666666; font-style: italic;">#&lt;/StoreModule&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">################################################################################</span>
<span style="color: #666666; font-style: italic;"># Прочие модули</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;</span>Modules<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Настройки плагина авторизации Always Online &quot;mod_auth_ao.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #666666; font-style: italic;"># Т.е. полное имя модуля mod_auth_ao.so</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module auth_ao<span style="color: #000000; font-weight: bold;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Настройки плагина авторизации InetAccess &quot;mod_auth_ia.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #666666; font-style: italic;"># Т.е. полное имя модуля mod_auth_ia.so</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module auth_ia<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Порт на котором принимаются обращения от авторизатора</span>
        <span style="color: #666666; font-style: italic;"># Значения: 1...65534</span>
        Port = <span style="color: #000000;">5555</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Время между посылками запроса пользователю жив ли он</span>
        <span style="color: #666666; font-style: italic;"># и обновлением данных статистики (секунды)</span>
        <span style="color: #666666; font-style: italic;"># Значения: 5...600</span>
        UserDelay = <span style="color: #000000;">15</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">#Таймаут для пользователя. Если в течение этого времени авторизатор</span>
        <span style="color: #666666; font-style: italic;">#не отвечает, пользователь будет отключен</span>
        <span style="color: #666666; font-style: italic;"># Значения: 15...1200</span>
        UserTimeout = <span style="color: #000000;">65</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Этот параметр определяет что будет передаваться программе InetAccess от сервера</span>
        <span style="color: #666666; font-style: italic;"># как отстаток предоплаченного трафика</span>
        <span style="color: #666666; font-style: italic;"># Значения:</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = 0 - кол-во бесплатных мегабайт в пресчете на цену нулевого направления</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = 1 - кол-во бесплатных мегабайт в пресчете на цену первого направления</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = 2 - кол-во бесплатных мегабайт в пресчете на цену второго направления</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = 3 - кол-во бесплатных мегабайт в пресчете на цену третьего направления</span>
        <span style="color: #666666; font-style: italic;"># ........................</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = 9 - кол-во бесплатных мегабайт в пресчете на цену девятого направления</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = cash - кол-во денег на которые юзер может бесплатно качать</span>
        <span style="color: #666666; font-style: italic;"># FreeMb = none - ничего не передавать</span>
        FreeMb = cash
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Модули можно использовать несколько раз с разными параметрами</span>
    <span style="color: #666666; font-style: italic;">#&lt;Module auth_ia&gt;</span>
    <span style="color: #666666; font-style: italic;">#    Port = 7777</span>
    <span style="color: #666666; font-style: italic;">#    UserDelay = 15</span>
    <span style="color: #666666; font-style: italic;">#    UserTimeout = 65</span>
    <span style="color: #666666; font-style: italic;">#    FreeMb = 0</span>
    <span style="color: #666666; font-style: italic;">#&lt;/Module&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Настройки модуля конфигурации SgConfig &quot;mod_conf_sg.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module conf_sg<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Порт по которому сервер взаимодействует с конфигуратором</span>
        <span style="color: #666666; font-style: italic;"># Значения: 1...65535</span>
        Port = <span style="color: #000000;">5555</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Модуль захвата трафика &quot;mod_cap_bpf.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #666666; font-style: italic;"># Без параметров. Только имя модуля.</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module cap_bpf<span style="color: #000000; font-weight: bold;">&gt;</span>
        <span style="color: #666666; font-style: italic;"># Интерфейс(ы) на котором нужно производить подсчет трафика</span>
        iface = rl0
        iface = rl1
        iface = dc0
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Модуль захвата трафика &quot;mod_cap_nf.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Принимает информацию о трафике по протоколу NetFlow</span>
    <span style="color: #666666; font-style: italic;"># Второй параметер - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module cap_nf<span style="color: #000000; font-weight: bold;">&gt;</span>
        <span style="color: #666666; font-style: italic;"># TCPPort - порт для TCP-соединений</span>
        TCPPort = <span style="color: #000000;">42111</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># UDPPort - порт для UDP-соединений</span>
        UDPPort = <span style="color: #000000;">42111</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Могут иметь совпадающие значения.</span>
        <span style="color: #666666; font-style: italic;"># Если параметр не указан - соответствующий порт не &quot;прослушивается&quot;.</span>
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Настройки модуля пингующего пользователей &quot;mod_ping.so&quot;</span>
    <span style="color: #666666; font-style: italic;"># Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>Module <span style="color: #c20cb9; font-weight: bold;">ping</span><span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># Время, в секундах, между пингами одного и того же пользователя</span>
        <span style="color: #666666; font-style: italic;"># Значения: 10...3600</span>
        PingDelay = <span style="color: #000000;">15</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">&lt;/</span>Module<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#    # Настройки модуля для удаленного выполнения скриптов OnCOnnect и</span>
<span style="color: #666666; font-style: italic;">#    # OnDisconnect &quot;mod_remote_script.so&quot;</span>
<span style="color: #666666; font-style: italic;">#    # Второй параметр - это имя модуля без mod_ в начале и .so в конце</span>
<span style="color: #666666; font-style: italic;">#    &lt;Module remote_script&gt;</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#        # Время, в секундах, между посылками подтверждений, того, что пользователь</span>
<span style="color: #666666; font-style: italic;">#        # всё еще онлайн</span>
<span style="color: #666666; font-style: italic;">#        # Значения: 10...600</span>
<span style="color: #666666; font-style: italic;">#        SendPeriod = 15</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#        # Соответствие подсетей, в которой находится пользователь и</span>
<span style="color: #666666; font-style: italic;">#        # соответствующего роутера. Первая часть строки - подслеть, заданная</span>
<span style="color: #666666; font-style: italic;">#        # как IP-адрес и маска, через пробел - IP-адрес роутера на котором</span>
<span style="color: #666666; font-style: italic;">#        # должны выполняться скрипты</span>
<span style="color: #666666; font-style: italic;">#        # Например эта запись &quot;192.168.1.0/24 192.168.1.1&quot; означает, что для</span>
<span style="color: #666666; font-style: italic;">#        # всех пользователей из подсети 192.168.1.0/24, скрипты будут</span>
<span style="color: #666666; font-style: italic;">#        # выполняться на роутере с адресом 192.168.1.1</span>
<span style="color: #666666; font-style: italic;">#        # Subnet0...Subnet100</span>
<span style="color: #666666; font-style: italic;">#        Subnet0 = 192.168.1.0/24 192.168.1.7</span>
<span style="color: #666666; font-style: italic;">#        Subnet1 = 192.168.2.0/24 192.168.2.5</span>
<span style="color: #666666; font-style: italic;">#        Subnet2 = 192.168.3.0/24 192.168.2.5</span>
<span style="color: #666666; font-style: italic;">#        Subnet3 = 192.168.4.0/24 192.168.2.5</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#        # Пароль для шифрования пакетов между stg-сервером и сервером,</span>
<span style="color: #666666; font-style: italic;">#        # выполняющим скрипты</span>
<span style="color: #666666; font-style: italic;">#        Password = 123456</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#        # Этот параметр определяет какие параметры пользователя передаются</span>
<span style="color: #666666; font-style: italic;">#        # на удаленный сервер</span>
<span style="color: #666666; font-style: italic;">#        # Cash, FreeMb, Passive, Disabled, AlwaysOnline, TariffName, NextTariff, Address,</span>
<span style="color: #666666; font-style: italic;">#        # Note, Group, Email, RealName, Credit, EnabledDirs, Userdata0...Userdata9</span>
<span style="color: #666666; font-style: italic;">#        UserParams=Cash Tariff EnabledDirs</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#        # Порт по которому сервер отсылает сообщения на роутер</span>
<span style="color: #666666; font-style: italic;">#        # Значения: 1...65535</span>
<span style="color: #666666; font-style: italic;">#        Port = 9999</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;">#    &lt;/Module&gt;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#    &lt;Module radius&gt;</span>
<span style="color: #666666; font-style: italic;">#        Password = 123456</span>
<span style="color: #666666; font-style: italic;">#        ServerIP = 127.0.0.1</span>
<span style="color: #666666; font-style: italic;">#        Port = 6666</span>
<span style="color: #666666; font-style: italic;">#        AuthServices = Login-User</span>
<span style="color: #666666; font-style: italic;">#        AcctServices = Framed-User</span>
<span style="color: #666666; font-style: italic;">#    &lt;/Module&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;/</span>Modules<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #666666; font-style: italic;">################################################################################</span></pre></div></div>

<p>Скрипты OnConnect, OnDisconnect и другие обрабатываются при наступлении соответствующего события. Например, при подключении пользователя ему должен открываться доступ к интернету. Соответственно, при отключении пользователя &#8220;окно&#8221; должно закрываться.<br />
Вот пример моих скриптов:<br />
<strong>OnConnect</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Login</span>
<span style="color: #007800;">LOGIN</span>=<span style="color: #007800;">$1</span>
<span style="color: #666666; font-style: italic;">#user IP</span>
<span style="color: #007800;">IP</span>=<span style="color: #007800;">$2</span>
<span style="color: #666666; font-style: italic;">#cash</span>
<span style="color: #007800;">CASH</span>=<span style="color: #007800;">$3</span>
<span style="color: #666666; font-style: italic;">#user ID</span>
<span style="color: #007800;">ID</span>=<span style="color: #007800;">$4</span>
<span style="color: #666666; font-style: italic;">#Selected dirs to connect</span>
<span style="color: #007800;">DIRS</span>=<span style="color: #007800;">$5</span>
<span style="color: #007800;">fw</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw&quot;</span>
<span style="color: #800000;">${fw}</span> table <span style="color: #000000;">1</span> add <span style="color: #007800;">$IP</span></pre></div></div>

<p>При соединении IP пользователя добавляется в таблицу фаервола, и ему открывается доступ в инет. </p>
<p><strong>OnDisconnect</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Login</span>
<span style="color: #007800;">LOGIN</span>=<span style="color: #007800;">$1</span>
<span style="color: #666666; font-style: italic;">#user IP</span>
<span style="color: #007800;">IP</span>=<span style="color: #007800;">$2</span>
<span style="color: #666666; font-style: italic;">#cash</span>
<span style="color: #007800;">CASH</span>=<span style="color: #007800;">$3</span>
<span style="color: #666666; font-style: italic;">#user ID</span>
<span style="color: #007800;">ID</span>=<span style="color: #007800;">$4</span>
<span style="color: #666666; font-style: italic;">#Selected dirs to disconnect</span>
<span style="color: #007800;">DIRS</span>=<span style="color: #007800;">$4</span>
<span style="color: #007800;">fw</span>=<span style="color: #ff0000;">&quot;/sbin/ipfw&quot;</span>
<span style="color: #800000;">${fw}</span> table <span style="color: #000000;">1</span> del <span style="color: #007800;">$IP</span></pre></div></div>

<p>При отключении ип пользователя удаляется из таблицы, доступ закрывается.</p>
<p>Остальная настройка подробно описана в мануале, ничего сложного там нет. Трафик считается, деньги исправно списываются.</p>
]]></content:encoded>
			<wfw:commentRss>http://snake.khd.ru/2009/10/poschitaem-vse-stargazer-kak-billing-dlya-nebolshoj-lokalki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

