URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 56656
[ Назад ]

Исходное сообщение
"Помогите, горю :)"

Отправлено sda , 23-Май-05 16:11 
   Народ. Помогите. Есть такое средство в FreeBSD, чтобы можно было натить на несколько реальных ip? Просто у меня очень ольшая куча клиентов и нужно их натить на 3 ip.

  примерно как на кошке.

  ip nat pool INET_POOL 194.220.196.172 194.220.196.174 prefix-length 24
ip nat inside source list MOBILE_LIST pool INET_POOL overload

  Есть ли такие средства на FreeBSD. ДОбился пока только map xl0 10.0.0.0/16 -> 194.220.196.172/32. Делаю 194.220.196.172/31 - не работает :(


Содержание

Сообщения в этом обсуждении
"Помогите, горю :)"
Отправлено universite , 23-Май-05 16:32 
Подели их на три группы. И нать каждую группу отдельно...

"Помогите, горю :)"
Отправлено sda , 23-Май-05 16:47 
Сам бы с радостью. ТОлько вот разделить по три группы /16 будет затруднительно.



"Помогите, горю :)"
Отправлено Rick Atreides , 23-Май-05 16:54 
>Сам бы с радостью. ТОлько вот разделить по три группы /16 будет
>затруднительно.

Тогда расскажи _зачем_ ?
Может быть тогда будет проще ответить на твой вопрос.


"Помогите, горю :)"
Отправлено sda , 23-Май-05 17:11 
  Ну для начала, ip-шники выдаются динамически, т.е. я не знаю какой именно из этой подсети достанется клиенты (ppp). Да и техничекси разделить подсеть /16 как?



"Помогите, горю :)"
Отправлено Rick Atreides , 23-Май-05 17:41 
>  Ну для начала, ip-шники выдаются динамически, т.е. я не знаю
>какой именно из этой подсети достанется клиенты (ppp). Да и техничекси
>разделить подсеть /16 как?

Если задача по любому использовать 3 (N ip адресов) то
divert natd1 ip from 192.168.1.1 to any out xmit fxp0
divert natd1 ip from 192.168.1.2 to any out xmit fxp0
.
.
divert natd2 ip from 192.168.1.8 to any out xmit fxp0
divert natd2 ip from 192.168.1.9 to any out xmit fxp0
.
.
divert natd3 ip from 192.168.1.16 to any out xmit fxp0

и

/sbin/natd -p natd1 -a ip1
/sbin/natd -p natd2 -a ip2
/sbin/natd -p natd3 -a ip3

Но опять-же, в чём приемущество перед использованием 1-го ip ?


"Помогите, горю :)"
Отправлено sda , 23-Май-05 17:49 
  Прсто маска подсети /16 65 с лишним адресов, клиентов куча. Выдается динамически, т.е. может быть 10.0.0.1 а может и 10.0.234.12 какой нить. с одного ip если во внешку босб загнется кол-во портов...

"Помогите, горю :)"
Отправлено AMDmi3 , 23-Май-05 23:21 
>   Народ. Помогите. Есть такое средство в FreeBSD, чтобы можно
>было натить на несколько реальных ip? Просто у меня очень ольшая
>куча клиентов и нужно их натить на 3 ip.
>
>  примерно как на кошке.

ipfw позволяет задавать `неправильные' маски, т.е. можно разделитять адреса на группы по последним битам адреса, что-то типа:

ipfw skipto 1000 ip from 10.0.0.0:255.255.0.3 to any
ipfw skipto 2000 ip from 10.0.0.1:255.255.0.3 to any
ipfw skipto 3000 ip from 10.0.0.2:255.255.0.3 to any
ipfw skipto 4000 ip from 10.0.0.3:255.255.0.3 to any

Разумеется, число групп получится степенью двойки, поэтому на 3 интерфейса можно сделать, например, 16 групп (последние 4 бита, маска 255.255.0.15) и разделить их как 5:5:6.

А вот что еще придумалось (это теория, причем решение ужасное, но есть над чем подумать). Для исходящих пакетов можно сделать:

skipto 1000 tcp from any to any established

skipto 1000 prob 0.333 tcp any to any setup
skipto 2000 prob 0.5 tcp any to any setup
skipto 3000 tcp any to any setup

1000: divert nat1, fwd ip1 to any для первого внешнего IP
2000: divert nat2, fwd ip2 to any для второго внешнего IP
3000: divert nat3, fwd ip3 to any для третьего внешнего IP

Т.е. для первого исходящего SYN каждый skipto сработает с вероятностью 1/3, и в соотв. группе правил пакет будет оттранслирован и отправлен через нужный интерфейс. Входящие пакеты прийдут на тот же интерфейс, тут все правильно. Последующие исходящие пакеты будут по очереди тыкаться в каждый nat, и оттранслированы будут только тем, который запомнил это TCP соединение (первый SYN пакет), после чего сразу отправлены через соотв. интерфейс. Всякие UDP и ICMP хрен знает как будут работать.

Чрезвычайно неэффективная и извращенная схема :)