NеoS 4 Опубликовано: 2011-10-14 21:37:23 Share Опубликовано: 2011-10-14 21:37:23 Доброго времени суток. Есть сервер на FreeBSD c установленным биллингом Nodeny.: em0 - первый провайдер re0 - второй провайдер em1 - смотрит в локалку. Задача такова - пустить инет в подсеть 192.168.1.0 через интерфейс em0, а в подсеть 192.168.2.0 через интерфейс re0. Как это можно сделать средствами pf nat или каким-то другим способом? Помогите пожалуйста! Ссылка на сообщение Поделиться на других сайтах
bos 39 Опубликовано: 2011-10-15 07:18:24 Share Опубликовано: 2011-10-15 07:18:24 1. Route to (in pf) 2. Setfib (core) + route to (pf) Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-10-16 08:18:40 Автор Share Опубликовано: 2011-10-16 08:18:40 1. Route to (in pf) 2. Setfib (core) + route to (pf) Пробовали, не хочет работать Ссылка на сообщение Поделиться на других сайтах
FonOdinus 92 Опубликовано: 2011-10-16 12:36:35 Share Опубликовано: 2011-10-16 12:36:35 Ядро пересобирали? options ROUTETABLES=2 имеется? Ссылка на сообщение Поделиться на других сайтах
bos 39 Опубликовано: 2011-10-16 16:11:52 Share Опубликовано: 2011-10-16 16:11:52 Вы не поверите, работает... может вы обратку не прописываете? Ссылка на сообщение Поделиться на других сайтах
muff 115 Опубликовано: 2011-10-17 14:25:18 Share Опубликовано: 2011-10-17 14:25:18 Вот статья, в которой пример реализации НАТа на двух интерфейсах с помощью PF. В вашем случае будет так (НАТ в pf.conf): set limit states 500000 set optimization aggressive nat pass on em0 from 192.168.1.0/24 to any -> em0 nat pass on re0 from 192.168.2.0/24 to any -> re0 НАТ будет работать, когда исходящий трафик будет форвардиться в интерфейсы. Используйте route-to. Готовый конфиг пока не предоставлю - нету рабочего решения в связи с отсутствием необходимости такой конфигурации. Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-10-17 20:29:25 Автор Share Опубликовано: 2011-10-17 20:29:25 В продолжении тему вот что получилось(НАТ в pf.conf): lan_net = "192.168.15.0/24" int_if = "em1" ext_if2 = "re0" ext_gw2 = "xx.xx.xx.xx" set limit states 128000 set optimization aggressive nat pass on em0 from 192.168.11.0/24 to any -> em0 nat pass on re0 from 192.168.15.0/24 to any -> re0 pass in on $int_if route-to { ($ext_if2 $ext_gw2) } from $lan_net to any keep state нифига не работает tcpdump на re0 молчит. на em1 tcpdump -i em1 host 192.168.15.2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on em1, link-type EN10MB (Ethernet), capture size 96 bytes 23:18:20.009352 IP 192.168.15.2.50072 > google-public-dns-a.google.com.domain: 14824+ A? www.msftncsi.com. (34) 23:18:20.072287 IP google-public-dns-a.google.com.domain > 192.168.15.2.50072: 14824 3/0/0 CNAME[|domain] 23:18:20.074191 IP 192.168.15.2.54246 > 65.55.119.90.http: Flags [s], seq 3347919421, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 23:18:20.962059 IP 192.168.15.2.50073 > 239.255.255.250.3702: UDP, length 656 23:18:21.116351 IP 192.168.15.2.50073 > 239.255.255.250.3702: UDP, length 656 и пи$дец Ссылка на сообщение Поделиться на других сайтах
bos 39 Опубликовано: 2011-10-18 07:43:21 Share Опубликовано: 2011-10-18 07:43:21 как я и говорил, где обратка? должно быть чет типа такого pass in quick on $my_if route-to {($pppoe $pppoe:peer)} from <my_net> to any pass out quick on $my_if reply-to {($pppoe $pppoe:peer)} from any to <my_net> Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-10-28 08:47:20 Автор Share Опубликовано: 2011-10-28 08:47:20 Пообщавшись с одним из разработчиком Nodeny, решили данную проблему. Всем спасибо за помощь! Ссылка на сообщение Поделиться на других сайтах
Elisium 10 Опубликовано: 2011-10-29 06:42:18 Share Опубликовано: 2011-10-29 06:42:18 Пообщавшись с одним из разработчиком Nodeny, решили данную проблему. Всем спасибо за помощь! Блин .. вот "люблю" такие сообщения... Как нужно на форуме ответы поискать, так и тема создана и т. д. А как только вопрос решён - так пух! и пропал человек и ответ вместе с ним. Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-11-25 08:35:30 Автор Share Опубликовано: 2011-11-25 08:35:30 Не прошло и пол года, но лучше поздно чем никогда: 1. Нужно собрать ядро с options ROUTETABLES=4 2. Конфиги (реальные с сервера): nodeny.cfg #=======================================================================# # # # NoDeny - конфигурационный файл ядра # # # #=======================================================================# $Db_name = 'bill'; # имя базы данных NoDeny $Db_user = 'bill_kernel'; # логин $Db_pw = '*******'; # пароль $Db_server = 'localhost'; # Сервер основной базы nodeny $Db_server_2 = 'localhost'; # Сервер дополнительной базы nodeny, # может совпадать с $Db_server $Db_server_a = 'localhost'; # Сервер с базой авторизации, # может совпадать с $Db_server $Db_mysql_connect_timeout = 6; # Таймаут на соединение с сервером БД $Smtp_server = '127.0.0.1'; # smtp сервер, через него будет выслано сообщение администрации о критической ошибке. # В письме будет указан отправитель nodeny@nodeny.dp.ua 1; nodeny.cfg.pl #NoDeny Config File $VER_cfg = 50.32; $Nodeny_dir = '/usr/local/nodeny'; $Log_file = '/usr/local/nodeny/nodeny.log'; $Script_adm = '/cgi-bin/adm/adm.pl'; $Script_stat = '/cgi-bin/stat.pl'; $img_dir = '/i'; $Adm_img_f_dir = '/usr/local/www/apache22/data/i/upload'; $Adm_img_dir = '/i/upload'; $db_server = 'localhost'; $db_server2 = 'localhost'; $db_auth_server = 'localhost'; $db_conn_timeout = 4; $db_conn_timeout2 = 4; $db_name = 'bill'; $user = 'bill_www'; $pw = '********'; $Passwd_Key = '********'; $Reload_Nets_Time = 0; @cl_nets = ( '' ); %Collectors = ( '1' => '127.0.0.1-Local ipcad', ); %l_nets = ( '1' => '0.0.0.0/0-*_*', ); $MaxSqlLen = 5000; $MaxCashIp = 1000000; $Kern_t_to_deny = 150; $Kern_t_chk_auth = 5; $Kern_t_traf = 30; $Kern_t_usr_reload = 60; $Kern_login_days_keep = 31; $Kern_Dtraf_days_keep = 31; $gr = 'грн.'; $kb = 1000; $m_tarif = 100; $Plan2_Title = 'Тарифы'; $Plan3_Title = ''; $Plan_got_money_day = 1; $over_cmp = 1; $Traf_zero_flush = 0; $Traf_change_dir = 0; %srvs = ( ); $Lang = ''; $Title_net = 'Интернет провайдер'; $email_admin = 'adm@gmail.com'; $smtp_server = '127.0.0.1'; $auto_on = 2; $Max_list_users = 50; $Max_list_pays = 40; $Max_line_chanal = 40; $Block_space_login = 0; $Auto_ip = 0; $Bold_out_traf = 1; $Block_bonus_pay = 1; $Show_reload_trf = 0; $MakeMailMess = 'Пароль можете получить/изменить ~url([url="http://xx.xx.xx.xx/cgi-bin/stat.pl?a=110~"]http://xx.xx.xx.xx/c.../stat.pl?a=110~[/url])(здесь~). Установка и настройка почты описана ~url([url="http://xx.xx.xx.xx/index.php?showtopic=123~"]http://xx.xx.xx.xx/i...?showtopic=123~[/url])(здесь~)'; $Tnt_timestamp = 0; $Block_rus_lat = 1; $UsrList_cols_template_max = 3; $How_show_balance = 0; $Show_detail_traf = 0; $Show_limit_balance = 0; $Max_paket_sets = 3; $mess_max_times = 5; $mess_day = 15; $Show_PPC = 1; $Stat_AddLines = ''; @Plugins = ( 'Spays', 'SSeance', 'Sdaytraf', 'Sdetailtraf', 'Stestnet', 'Smessadm', 'Ssetpacket', 'Scards', 'Sgraf' ); %PluginsAdm = ( '1' => 'agraf-Загрузка канала', ); $Sat_t_monitor = 24; $Sat_t_no_ping = 11; $card_login = 0; $card_synbl = 14; $card_slogin = 8; $card_abc = 0; $mail_enable = 0; $mail_host = 'localhost'; $mail_db = 'mail'; $mail_user = 'mail_nodeny'; $mail_pass = '********'; $mail_table = 'users'; $mail_p_email = 'email'; $mail_p_pass = 'passwd'; $mail_p_user = 'name'; $mail_p_dir = 'maildir'; $mail_p_enable = 'enabled'; $mail_check_dir = 1; @jobs = ( 'Подключение', 'Первоначальная настройка', 'Ремонт', 'Настройка' ); $MPfont = '/usr/local/www/apache22/data/maps/arial.ttf'; $MP_dir = '/maps/'; $MP_Cbox0 = '#000000'; $MP_Cbox1 = '#008000'; $MP_Cbox2 = '#00d000'; $MP_Cbox3 = '#999999'; $MP_Cline = '#0000ff'; $MP_Coffline = '#f0f080'; $MP_graf_clr = '#0088ff'; $MP_name0 = ''; $MP_map0 = ''; $MP_boxR0 = 0; $MP_size0 = 0; $MP_start0 = ''; $MP_name1 = ''; $MP_map1 = ''; $MP_boxR1 = 0; $MP_size1 = 0; $MP_start1 = ''; $MP_name2 = ''; $MP_map2 = ''; $MP_boxR2 = 0; $MP_size2 = 0; $MP_start2 = ''; $MP_name3 = ''; $MP_map3 = ''; $MP_boxR3 = 0; $MP_size3 = 0; $MP_start3 = ''; $MP_name4 = ''; $MP_map4 = ''; $MP_boxR4 = 0; $MP_size4 = 0; $MP_start4 = ''; $MP_name5 = ''; $MP_map5 = ''; $MP_boxR5 = 0; $MP_size5 = 0; $MP_start5 = ''; $MP_name6 = ''; $MP_map6 = ''; $MP_boxR6 = 0; $MP_size6 = 0; $MP_start6 = ''; $MP_name7 = ''; $MP_map7 = ''; $MP_boxR7 = 0; $MP_size7 = 0; $MP_start7 = ''; $MP_name8 = ''; $MP_map8 = ''; $MP_boxR8 = 0; $MP_size8 = 0; $MP_start8 = ''; $MP_name9 = ''; $MP_map9 = ''; $MP_boxR9 = 0; $MP_size9 = 0; $MP_start9 = ''; $MP_name10 = ''; $MP_map10 = ''; $MP_boxR10 = 0; $MP_size10 = 0; $MP_start10 = ''; $MP_name11 = ''; $MP_map11 = ''; $MP_boxR11 = 0; $MP_size11 = 0; $MP_start11 = ''; $MP_name12 = ''; $MP_map12 = ''; $MP_boxR12 = 0; $MP_size12 = 0; $MP_start12 = ''; $MP_name13 = ''; $MP_map13 = ''; $MP_boxR13 = 0; $MP_size13 = 0; $MP_start13 = ''; %Regions = ( '2' => 'Охотниково-', '1' => 'Карьерное-', ); %Presets = ( 1 => 'Основной пресет', ); %Dopfields_tmpl = ( '2' => 'Адрес-', '1' => 'Технические данные-', ); %Eq_types = ( ); 1; pf.conf lan_net = "192.168.15.0/24" int_if = "em1" ext_if2 = "re0" ext_gw2 = "xx.xx.xx.xx" set limit states 128000 set optimization aggressive #нат для сети нужно писать по 2 правила иначе кина не будет. nat pass on re0 from 192.168.4.0/24 to any -> re0 nat pass on em0 from 192.168.4.0/24 to any -> em0 nat pass on em0 from 192.168.3.0/24 to any -> em0 nat pass on re0 from 192.168.5.0/24 to any -> re0 nat pass on em0 from 192.168.5.0/24 to any -> em0 nat pass on em0 from 192.168.6.0/24 to any -> em0 nat pass on re0 from 192.168.7.0/24 to any -> re0 nat pass on em0 from 192.168.7.0/24 to any -> em0 #nat pass on em0 from 192.168.8.0/24 to any -> re0 nat pass on em0 from 192.168.8.0/24 to any -> em0 nat pass on em0 from 192.168.9.0/24 to any -> em0 nat pass on em0 from 192.168.10.0/24 to any -> em0 nat pass on em0 from 192.168.11.0/24 to any -> em0 nat pass on em0 from 192.168.12.0/24 to any -> em0 nat pass on em0 from 192.168.2.0/24 to any -> em0 rc.conf # -- sysinstall generated deltas -- # Fri Dec 17 22:10:20 2010 # Created: Fri Dec 17 22:10:20 2010 # Enable network daemons for user convenience. # Please make all changes to this file, not to /etc/defaults/rc.conf. # This file now contains just the overrides from /etc/defaults/rc.conf. defaultrouter="xx.xx.xx.xx" font8x14="cp866-8x14" font8x16="cp866b-8x16" font8x8="cp866-8x8" gateway_enable="YES" hostname="neos" ifconfig_em0="inet xx.xx.xx.xx netmask 255.255.255.252" ifconfig_em1="inet 192.168.2.1 netmask 255.255.255.0" keymap="ru.koi8-r" keyrate="fast" mousechar_start="3" saver="daemon" scrnmap="koi8-r2cp866" sshd_enable="YES" mysql_enable="YES" apache22_enable="YES" firewall_enable="YES" mpd_enable="YES" mysql_dbdir="/usr/mysql" radiusd_enable="YES" pf_enable="YES" ipcad_enable="YES" # -- sysinstall generated deltas -- # Sun Feb 6 18:33:39 2011 ifconfig_em1="inet 192.168.2.1 netmask 255.255.255.0" ifconfig em1 alias 192.168.1.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.3.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.4.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.5.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.6.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.7.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.8.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.9.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.10.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.11.1 netmask 255.255.0.0 ifconfig em1 alias 192.168.15.1 netmask 255.255.0.0 hostname="neos.billing" apache22_enable="YES" hostname="neos.billing" dhcpd_enable="YES" dhcpd_ifaces="em1" named_enable="YES" ifconfig_re0="inet 194.24.237.106 netmask 255.255.255.252" rc.firewall #!/bin/sh - f='/sbin/ipfw' ifOut='em0' # Сети, в/из которых трафик блокируем ${f} table 120 flush ${f} table 120 add 224.0.0.0/4 ${f} table 120 add 172.16.0.0/12 #Сети которые ходят во второй канал ${f} table 30 add 192.168.4.0/24 ${f} table 30 add 192.168.5.0/24 ${f} table 30 add 192.168.7.0/24 ${f} table 30 add 192.168.8.0/24 ${f} -f flush #${f} add 1 allow ip from any to any ${f} add 3 allow tcp from any to me dst-port 3306 ${f} add 48 allow ip from any to me dst-port 8890 ${f} add 50 allow tcp from any to me 22 ${f} add 51 allow tcp from me 22 to any ${f} add 52 allow tcp from any to me 80 ${f} add 53 allow tcp from me 80 to any ${f} add 54 allow tcp from any to me 443 ${f} add 55 allow tcp from me 443 to any ${f} add 100 deny tcp from any to any 445 ${f} add 110 allow ip from any to any via lo0 ${f} add 120 skipto 1000 ip from me to any ${f} add 130 deny icmp from any to any in icmptype 5,9,13,14,15,16,17 ${f} add 140 deny ip from any to "table(120)" ${f} add 150 deny ip from "table(120)" to any ${f} add 160 skipto 2000 ip from any to me ${f} add 200 skipto 500 ip from any to any via ${ifOut} ${f} add 201 skipto 500 ip from any to any via re0 ${f} add 211 fwd 127.0.0.1,81 tcp from "table(35)" to not me dst-port 80 ${f} add 212 fwd 127.0.0.1,8080 tcp from not "table(0)" to not me dst-port 80 ${f} add 300 setfib 1 ip from "table(30)" to any in ${f} add 350 skipto 4500 ip from any to any in ${f} add 400 skipto 450 ip from any to any recv ${ifOut} ${f} add 401 skipto 450 ip from any to any recv re0 ${f} add 420 tee 1 ip from any to any ${f} add 450 tee 2 ip from any to any ${f} add 490 allow ip from any to any ${f} add 500 skipto 32500 ip from any to any in ${f} add 510 tee 1 ip from any to any ${f} add 540 allow ip from any to any ${f} add 1000 allow udp from any 53,7723 to any ${f} add 1010 allow tcp from any to any setup keep-state ${f} add 1020 allow udp from any to any keep-state ${f} add 1100 allow ip from any to any ${f} add 2000 check-state ${f} add 2010 allow icmp from any to any ${f} add 2020 allow tcp from any to any 80,443 ${f} add 2050 deny ip from any to any via ${ifOut} ${f} add 2051 deny ip from any to any via re0 ${f} add 2060 allow udp from any to any 53,7723 ${f} add 2100 deny ip from any to any ${f} add 32490 deny ip from any to any Ссылка на сообщение Поделиться на других сайтах
Elisium 10 Опубликовано: 2011-11-27 21:23:37 Share Опубликовано: 2011-11-27 21:23:37 Спасибо ) Ссылка на сообщение Поделиться на других сайтах
Artcv 4 Опубликовано: 2011-11-28 08:34:17 Share Опубликовано: 2011-11-28 08:34:17 Очень хорошо что написали как это реализовать! Спасибо! Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-11-28 08:53:10 Автор Share Опубликовано: 2011-11-28 08:53:10 Да всегда пожалуйста Ссылка на сообщение Поделиться на других сайтах
911 140 Опубликовано: 2011-11-28 09:45:51 Share Опубликовано: 2011-11-28 09:45:51 только конфигов как-то мало привели Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-11-28 15:43:28 Автор Share Опубликовано: 2011-11-28 15:43:28 По-моему достаточно)) Ссылка на сообщение Поделиться на других сайтах
make.kernel 0 Опубликовано: 2011-11-28 23:05:53 Share Опубликовано: 2011-11-28 23:05:53 ${f} add 200 skipto 500 ip from any to any via ${ifOut}${f} add 201 skipto 500 ip from any to any via re0 .... ${f} add 500 skipto 32500 ip from any to any in Сама логика прикольная, зима на улице, серверную греть нада, но правила 32500 в конфигах нет, значит конфиги явно не все Ссылка на сообщение Поделиться на других сайтах
911 140 Опубликовано: 2011-11-29 00:04:44 Share Опубликовано: 2011-11-29 00:04:44 По-моему достаточно)) конфига айпикада нет а все остальное лишнее, кроме pf.conf и rc.firewall Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубликовано: 2011-11-29 16:13:21 Share Опубликовано: 2011-11-29 16:13:21 А стандартными средствами, без pf, такое можно во Фре реализовать? Без последующего геморроя? Ссылка на сообщение Поделиться на других сайтах
Elisium 10 Опубликовано: 2011-11-29 17:19:33 Share Опубликовано: 2011-11-29 17:19:33 ${f} add 200 skipto 500 ip from any to any via ${ifOut}${f} add 201 skipto 500 ip from any to any via re0 .... ${f} add 500 skipto 32500 ip from any to any in Сама логика прикольная, зима на улице, серверную греть нада, но правила 32500 в конфигах нет, значит конфиги явно не все В Нодени спец. скрипт дописывает динамически необходимые правила. рц.фиревалл )) сделан специально под этот скрипт. Ссылка на сообщение Поделиться на других сайтах
vovchokig 35 Опубликовано: 2011-11-29 21:16:00 Share Опубликовано: 2011-11-29 21:16:00 Абсолютно согласен с 911. Нужны в данном случае только rc.firewall , pf.conf, ipcad.conf. Кстати по данному поводу очень интересная статья - http://xander.org.ua/doc/samag/02.2007_09.html По данным конфигам defaultrouter="xx.xx.xx.xx",это понятно, но другой шлюз нигде не звучит(для ifconfig_re0="inet 194.24.237.106 netmask 255.255.255.252"). Это или ошибка , или неполные конфиги. Думаю такая конструкция более правильная. nat on rl0 from 192.168.0.0/25 to any -> 10.0.1.2 nat on rl1 from 192.168.0.128/25 to any -> 10.1.1.2 pass out route-to (rl0 10.0.1.1) from 10.0.1.2 to any pass out route-to (rl1 10.1.1.1) from 10.1.1.2 to any Также интересует настройка ipcad на двух интерфейсах. Ссылка на сообщение Поделиться на других сайтах
NеoS 4 Опубликовано: 2011-12-04 23:05:44 Автор Share Опубликовано: 2011-12-04 23:05:44 Ещё один интересный момент, юзеров можно перекидывать не подсетями с канала на канал, а прямо из биллинга конкретного абонента: В ядре должна быть включена опция: options ROUTETABLES=4 файрвол для двух каналов выглядит приблизительно так (показаны только нужные места): 00200 skipto 500 ip from any to any via ng0 00201 skipto 500 ip from any to any via rl1 00300 setfib 1 ip from table(30) to any in ... 00350 skipto 4500 ip from any to any in 00400 skipto 450 ip from any to any recv ng0 00401 skipto 450 ip from any to any recv rl1 00450 tee 2 ip from any to any 00490 allow ip from any to any 00500 skipto 32500 ip from any to any in 00510 tee 1 ip from any to any ... 02000 check-state ... 02050 deny ip from any to any via ng0 02051 deny ip from any to any via rl1 Далее в админке создаем поле с алиасом _chanel типа Да/Нет (для двух каналов) или целое положительное если каналов больше при помощи этого поля будем пристегивать юзера к каналу (переключение будет происходить приблизельно через 15-20 секунд) создаем файлик /usr/local/nodeny/chanel.txt ============================== ==================== <file>/usr/local/etc/chanel_script</file> <reload>sh /usr/local/etc/chanel_script</reload> <template>1</template> #!/bin/sh - f='/sbin/ipfw' ${f} table 30 flush <filtr dopdata-_chanel='1'> ${f} table 30 add <ip>/32 </filtr> ================================================== Если каналов больше чем два то аналогично добавляем разбор поля для 2,3,4 и т.д. в другую таблицу и подправляем файрвол типа: 00301 setfib 2 ip from table(31) to any in Собственно все!, юзается по правилам nomake т.е nohup perl nomake.pl chanel.txt & В последних версиях nomake введена поддержка pid и были проблемы с множественностью демонов nomake (не знаю чем все закончилось) поэтому я юзаю nomake от версии 50.17 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас