md5
NoDeny
Старожил
Карма: 0
Offline
Сообщений: 256
|
|
« Ответ #60 : 23 Декабря 2010, 15:11:25 » |
|
PF со статикой! одно угнетает что шлюз по дефолту отлично работает lan_net = "10.0.0.0/16" int_if = "em0"
ext_if1 = "sk1" ext_if2 = "sk0"
ext_gw1 = "ссс.ссс.ссс.ссс" ext_gw2 = "ссс.ссс.ссс.ссс"
table <ua-ix> persist file "/usr/local/nodeny/prefixes.txt" table <lan1> persist file "/usr/local/nodeny/lan1.lan" table <lan2> persist file "/usr/local/nodeny/lan2.txt"
# nat исходящие соединения на каждый интерфейс Интернета
nat on $ext_if1 from $lan_net to any -> ($ext_if1) nat on $ext_if2 from $lan_net to any -> ($ext_if2)
# pass all исходящие пакеты на внутреннем интерфейсе pass out on $int_if from any to $lan_net
# pass in quick any пакеты, предназначенные для шлюза itself pass in quick on $int_if from $lan_net to $int_if
# Принимаем http трафик и пускаем его через шлюз $ext_gw2 pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto tcp from $lan_net to !<ua-ix> port {80 443 8080 8103} flags S/SA modulate state
# Принимаем остальной трафик и если он направлен в юаикс отправляем через 2 провайдера сразу pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto {tcp} from $lan_net to <ua-ix> port {1:20 23:79 81:442 444:2801 2803:7776 7778:8021 8023:65500} flags S/SA
# Принимаем остальной трафик и если он направлен !!!!!НЕ!!!!! в юаикс отправляем через шлюз $ext_gw1 который прописан в defaultrouter pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto {tcp} from $lan_net to !<ua-ix> port {1:20 23:79 81:442 444:2801 2803:7776 7778:8021 8023:65500} flags S/SA
# Принимаем udp ели предназначены для юаикса пускаем через два провайдера сразу.. pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp } from $lan_net to <ua-ix> keep state
# Принимаем udp если не пренодлежит юаиксу пускаем через шлюз 1. pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { udp } from $lan_net to !<ua-ix> keep state
# Принимаем icmp если пренодлежит юаиксу пускаем через шлюз 2. pass in on $int_if route-to { ($ext_if2 $ext_gw2) } inet proto { icmp } from $lan_net to <ua-ix> keep state
# Принимаем icmp если не пренодлежит юаиксу пускаем через шлюз 1. pass in on $int_if route-to { ($ext_if1 $ext_gw1) } inet proto { icmp } from $lan_net to !<ua-ix> keep state
# Общие "pass out" правила для внешних интерфейсов pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state pass out on $ext_if1 proto { udp, icmp, tcp } from any to any keep state pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state pass out on $ext_if2 proto { udp, icmp, tcp } from any to any keep state
# маршрутизации пакетов с любого IP-адреса на $ext_if1 to $ext_gw1 и та же для $ext_if2 и $ext_gw2 pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any. pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any при включении этого правила только icmp идут на интерфейс второга ипа. ежели выключаешь то тишина полная
|
|
|
Записан
|
|
|
|
PulsarK
Новичок
Карма: 0
Offline
Сообщений: 4
|
|
« Ответ #61 : 01 Июня 2011, 13:42:51 » |
|
Немного подыму тему в связи с аналогичной проблемой. Нужно часть клиентов перекинуть на другой аплинк с другим гейтвеем. Дано: FreeBSD 7.2 Клиенты подключаются через PPPoE (MPD), потому возня с интерфейсами ng* NAT крутится на PF Теперь, как я понял, нужно настроить форвардинг пакетов от части клиентов на другой гейтвей. В каком месте в IPFW можно прикрутить правила форвардинга, но чтобы биллинг не пострадал? Список правил (лишне убрал): # ipfw show 00050 3152 287692 allow tcp from any to me dst-port 22 00051 2581 783824 allow tcp from me 22 to any 00110 1873589 3661269797 allow ip from any to any via lo0 00120 1238244 351727011 skipto 1000 ip from me to any 00130 35272 1899961 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17 00160 13695188 1269721322 skipto 2000 ip from any to me 00200 607526540 496564200772 skipto 500 ip from any to any via em0 00201 0 0 skipto 500 ip from any to any via vlan1200 00300 256507799 65219388294 skipto 4500 ip from any to any in 00400 350837488 428767598132 skipto 450 ip from any to any recv em0 00401 0 0 skipto 450 ip from any to any recv vlan1200 00420 310046 221427080 allow ip from any to any 00450 350836210 428766398972 divert 2 ip from any to any 00490 350837872 428767633478 allow ip from any to any 00500 352998448 431575854202 skipto 32500 ip from any to any in 00510 254552333 64997278556 divert 1 ip from any to any 00540 247818228 64860330530 allow ip from any to any 01000 449137 99357287 allow udp from any 53 to any 01010 279306 231073708 allow tcp from any to any setup keep-state 01020 983479 123073608 allow udp from any to any keep-state 01100 28821 19198815 allow ip from any to any 02000 0 0 check-state 02010 82040 72046228 allow icmp from any to any 02015 220780 196793087 allow tcp from any to me dst-port 80 limit src-addr 16 02020 16125 2303436 allow tcp from any to me dst-port 443,25,21 02050 12293412 840853800 deny ip from any to any via em0 02051 68 4779 deny ip from any to any via vlan1200 02060 463767 29497975 allow udp from any to any dst-port 53 02100 115038 7016333 deny ip from any to any 04800 17049 4373381 fwd 127.0.0.1,83 ip from table(35) to not me dst-port 80 04900 297096 50381657 fwd 127.0.0.1,82 ip from not table(0) to not me dst-port 80 05000 755828 52956788 deny ip from not table(0) to any 05001 165133274 37474768981 skipto 5010 ip from table(127) to table(126) 05002 90271241 27633576304 skipto 5030 ip from any to not table(2) 05003 3355 233190 deny ip from any to not table(1) 05004 27837 2952550 pipe tablearg ip from table(21) to any 05005 0 0 deny ip from any to any 05010 165133274 37474768981 pipe tablearg ip from table(127) to any 05030 3239 155740 deny tcp from table(15) to any dst-port 25,465 05226 0 0 allow ip from table(127) to table(126) 05400 90268001 27633420469 pipe tablearg ip from table(11) to any 32000 1 95 deny ip from any to any 32490 1393 96462 deny ip from any to any 33000 260190627 347976754424 pipe tablearg ip from table(126) to table(127) 33001 92807820 83599099621 skipto 33010 ip from not table(2) to any 33002 1 157 pipe tablearg ip from any to table(20) 33003 0 0 deny ip from any to any 33226 0 0 allow ip from table(126) to table(127) 33400 92800444 83598400720 pipe tablearg ip from any to table(10) 65535 7376 698901 deny ip from any to any Заранее благодарен за помощь. PS Через PF тяжело организовать, так как внутренний интерфейс получается не один, а целая куча (ng*).
|
|
|
Записан
|
|
|
|
VitalVas
NoDeny
Спец
Карма: 60
Offline
Сообщений: 991
|
|
« Ответ #62 : 01 Июня 2011, 14:36:58 » |
|
от тебе пример, на основе этого можно без проблем дописать правила.... правила полностью рабочие, но не от этого биллинга gateway# ipfw list 00101 allow tcp from any to me dst-port 80 00102 allow udp from any to me dst-port 53 via sk1 00103 allow udp from any to me dst-port 67 via sk1 00105 allow tcp from any to me dst-port 1723 00106 allow tcp from any to me dst-port 5006 00110 allow ip from any to me dst-port 139,445 via sk1 00130 allow icmp from any to me in icmptypes 0,8 00150 fwd 127.0.0.1,8922 tcp from table(3) to table(2) dst-port 80,443 00200 check-state 00220 allow ip from me to any keep-state 00230 setfib 1 ip from any to me in recv ste0 00231 setfib 2 ip from any to me in recv rl0 00232 setfib 0 ip from any to me in recv сс 00250 allow ip from any to any via nfe0 00251 allow ip from any to any via ste0 00252 allow ip from any to any via rl0 00301 setfib 2 ip from table(5) to any 00302 skipto 500 ip from table(5) to any 00305 setfib 2 ip from any to table(5) 00306 skipto 600 ip from any to table(5) 00310 setfib 1 ip from table(10) to any 00312 skipto 500 ip from table(10) to any 00314 setfib 1 ip from any to table(10) 00316 skipto 600 ip from any to table(10) 00320 setfib 0 ip from table(6) to any 00322 skipto 500 ip from table(6) to any 00324 setfib 0 ip from any to table(6) 00326 skipto 600 ip from any to table(6) 00510 pipe tablearg ip from table(0) to any 00590 deny ip from any to any 00610 pipe tablearg ip from any to table(1) 00690 deny ip from any to any 65535 deny ip from any to any
где ste0,rl0,nfe0 - аплинки......
|
|
|
Записан
|
|
|
|
PulsarK
Новичок
Карма: 0
Offline
Сообщений: 4
|
|
« Ответ #63 : 02 Июня 2011, 19:04:17 » |
|
Спасибо за подсказку. Пересобрал ядро, setfib заработал. Но появились новые грабли. Пакеты, на которые распространяется правило с "setfib 1" , пропадают на правиле с "divert 1" (сокет IPCADа). Может ктото подсказать в чём причина?
|
|
|
Записан
|
|
|
|
VitalVas
NoDeny
Спец
Карма: 60
Offline
Сообщений: 991
|
|
« Ответ #64 : 02 Июня 2011, 20:37:30 » |
|
хм.... я divert вообще не юзаю capture-ports enable; buffers = 64k; interface sk1; aggregate 192.168.0.0/16 strip 32; rsh enable at 127.0.0.1; rsh root@127.0.0.1 admin; rsh ttl = 10; rsh timeout = 60; dumpfile = ipcad.dump; chroot = /tmp; memory_limit = 512m;
может нужно покурить в сторону sysctl
|
|
|
Записан
|
|
|
|
PulsarK
Новичок
Карма: 0
Offline
Сообщений: 4
|
|
« Ответ #65 : 04 Июня 2011, 18:54:02 » |
|
Проблема решилась. Решение нашёл на этом же форуме - http://forum.nodeny.com.ua/index.php?topic=362.0В правилах IPFW заменил "divert" на "tee". Окончательный вариант фаервола IPFW (лишнее убрал): # ipfw list 00050 allow tcp from any to me dst-port 22 00051 allow tcp from me 22 to any 00080 setfib 1 ip from 10.0.10.128/25 to any 00090 setfib 1 ip from any to 10.0.10.128/25 00110 allow ip from any to any via lo0 00120 skipto 1000 ip from me to any 00130 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17 00160 skipto 2000 ip from any to me 00200 skipto 500 ip from any to any via em0 00201 skipto 500 ip from any to any via vlan1200 00300 skipto 4500 ip from any to any in 00400 skipto 450 ip from any to any recv em0 00401 skipto 450 ip from any to any recv vlan1200 00420 allow ip from any to any 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 00540 allow ip from any to any 01000 allow udp from any 53 to any 01010 allow tcp from any to any setup keep-state 01020 allow udp from any to any keep-state 01100 allow ip from any to any 02000 check-state 02010 allow icmp from any to any 02015 allow tcp from any to me dst-port 80 limit src-addr 16 02020 allow tcp from any to me dst-port 443,25,21 02050 deny ip from any to any via em0 02051 deny ip from any to any via vlan1200 02060 allow udp from any to any dst-port 53 02100 deny ip from any to any 04800 fwd 127.0.0.1,83 ip from table(35) to not me dst-port 80 04900 fwd 127.0.0.1,82 ip from not table(0) to not me dst-port 80 05000 deny ip from not table(0) to any 05001 skipto 5010 ip from table(127) to table(126) 05002 skipto 5030 ip from any to not table(2) 05003 deny ip from any to not table(1) 05004 pipe tablearg ip from table(21) to any 05005 deny ip from any to any 05010 pipe tablearg ip from table(127) to any 05030 deny tcp from table(15) to any dst-port 25,465 05226 allow ip from table(127) to table(126) 05400 pipe tablearg ip from table(11) to any 32000 deny ip from any to any 32490 deny ip from any to any 33000 pipe tablearg ip from table(126) to table(127) 33001 skipto 33010 ip from not table(2) to any 33002 pipe tablearg ip from any to table(20) 33003 deny ip from any to any 33226 allow ip from table(126) to table(127) 33400 pipe tablearg ip from any to table(10) 65535 deny ip from any to any В конфиге IPCADa (ipcad.conf) заменил интерфейс "divert" на "tee". Перед этим в конфиге PF настроил NAT для нужных диапазонов адресов. Также были прописаны нужные направления во второй таблице маршрутизации через setfib 1. PS Версия nodeny - 50.32
|
|
« Последнее редактирование: 04 Июня 2011, 18:59:28 от PulsarK »
|
Записан
|
|
|
|
kuhar
NoDeny
Постоялец
Карма: 0
Offline
Сообщений: 128
|
|
« Ответ #66 : 04 Декабря 2011, 20:58:54 » |
|
причому тут bgp ? я питаюсь як правильно зробити конфіг pf щоб працювало з інтерфейсом на якому міняється шлюз.
делаешь его основным, а дальше пишешь статическую маршрутизацию для другого провайдера А можно плиззз тут по подробней, к меня два входа одного и того же прова, у которых меняется шлюз, как быть в этой ситуации?
|
|
|
Записан
|
|
|
|
kuhar
NoDeny
Постоялец
Карма: 0
Offline
Сообщений: 128
|
|
« Ответ #67 : 03 Июня 2013, 07:06:34 » |
|
Всем привет. Подскажите, плизз как организовать, следующую схему: Есть два прова PS1 и PS2, оба на серваке соединяются по (это один и тот же провайдер, но с разными ip и шлюзами). Нужно сделать так, чтобы один пров PS1 раздавал на локальную подсеть, например 10.0.24.0/24, а второй PS2 на 10.0.25.0/24. Фаервол настроен на две сетевухи, все ок, я думал что достаточно в pf настроить так: set limit states 128000 set optimization aggressive
nat pass on re2 from 10.0.24.0/24 to any -> re2 nat pass on re0 from 10.0.25.0/24 to any -> re0
re2 - PS1 re0 - PS2 И будет все работать, но не тут то было, по умолчанию принимает шлюз либо PS1, либо PS2 и соответственно в зависимости от шлюза работают абоны либо в подсети 10.0.24.0/24, либо в 10.0.25.0/24. Попытался добавить руками второй шлюз, и оно как бы работает, но с очень большими потерями пакетов, иногда вообще не работает. Подскажите, плизз, как правильно это организовать.
|
|
|
Записан
|
|
|
|
Redmen
NoDeny
Ветеран
Карма: 62
Offline
Сообщений: 546
Подяку в КАРМУ
|
|
« Ответ #68 : 03 Июня 2013, 08:00:42 » |
|
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #69 : 03 Июня 2013, 08:13:39 » |
|
хм как связаны? ROUTETABLES и pf ? если делать средствами pf то ROUTETABLES не нужен. а по сути в pf надо еще кроме ната указать что и через какой интерфейс выходить будет .
|
|
|
Записан
|
|
|
|
Rico-X
NoDeny
Старожил
Карма: 7
Offline
Сообщений: 349
|
|
« Ответ #70 : 03 Июня 2013, 08:32:32 » |
|
Все просто, в конце правил добавьте pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat> pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat> и все заработает, если нет - уберите pass из своих правил.
|
|
|
Записан
|
|
|
|
kuhar
NoDeny
Постоялец
Карма: 0
Offline
Сообщений: 128
|
|
« Ответ #71 : 03 Июня 2013, 08:35:33 » |
|
Ядро у меня собрано с options ROUTETABLES=3
|
|
|
Записан
|
|
|
|
kuhar
NoDeny
Постоялец
Карма: 0
Offline
Сообщений: 128
|
|
« Ответ #72 : 03 Июня 2013, 08:39:00 » |
|
Пробовал с такой конфигурацией: set limit states 128000 set optimization aggressive
ext_if1="ip_PS1" ext_if2="ip_PS2" ext_gw1="GW_PS1" ext_gw2="GW_PS2"
nat pass on $ext_if1 from 10.0.0.0/8 to any -> $ext_if1 nat pass on $ext_if2 from 10.0.25.0/24 to any -> $ext_if2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat> pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
Но результатов не дало... Все просто, в конце правил добавьте pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat> pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat> и все заработает, если нет - уберите pass из своих правил. Правда без pass не пробовал. Если два прова соединяются по DHCP в таблице должно ведь быть 2 шлюза, правильно?
|
|
|
Записан
|
|
|
|
Rico-X
NoDeny
Старожил
Карма: 7
Offline
Сообщений: 349
|
|
« Ответ #73 : 03 Июня 2013, 10:42:31 » |
|
Пробуйте без pass должно все работать. В своем случае создайте таблицу nonat и закиньте туда адреса на которые натить не нужно или замените !<no_nat> на any
|
|
|
Записан
|
|
|
|
kuhar
NoDeny
Постоялец
Карма: 0
Offline
Сообщений: 128
|
|
« Ответ #74 : 03 Июня 2013, 15:38:08 » |
|
Возможно глупый вопрос, но спрошу. При проверки дефолтного шлюза, чтобы это все работало, netstat должен выдавать 2 шлюза или один?
|
|
|
Записан
|
|
|
|
|