Перейти к содержимому
Калькуляторы

iptables опция --persistent

Использовал до недавнего времени iptables и ядро 2.2.24 когда был same.

Обновил ядро, iptables (почитав перед эти про исчезновение и реинкарнацию same'а).

Делаю

iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source ххх.ххх.226.128-ххх.ххх.226.250
Получаю криво работающую аську, неработающее "контактное" видео, через раз работает SSL.

 

Делаю

iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source ххх.ххх.226.128-ххх.ххх.226.250 --persistent
Я так понимаю в таком варианте выдаются сопоставлений 1:1 и когда заканчиваются белые адреса из диапазона остальные клиенты идут лесом ?

 

Подскажите пожалуйста что сделать с NAT'ом чтобы он корректно работал ?

 

Linux sh 2.6.31.4 #1 SMP x86_64 GNU/Linux

iptables v1.4.5

Изменено пользователем pchol

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю в таком варианте выдаются сопоставлений 1:1 и когда заканчиваются белые адреса из диапазона остальные клиенты идут лесом ?
--persistent

Gives a client the same source-/destination-address for each connection.

Не сказано, что адрес выделенный.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мы портировали SAME со старых версий ядер, это не сложно (пока).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё казалось гораздо лучше.

--persistent работает как старый same. Сутки прошли, жалоб нет.

Всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть внешние адреса на которые натятся абоненты. Переодически кого-то где-то банят и абоненты с одного адреса не могут достучатся до разных сайтов. Появилась идея - по

-j SNAT ... --persistent

при каждом риконекте по pppoe/pptp натить абонента на новый адрес, а именно при accounting-stop на радиусе чистить условия выбора исходящего нат адреса по абоненту.

Почему-то подумалось что persistent основывает выбор адреса на который натить из коннтрака. Собрал тестовую схему, пробую достучаться до инета с src адреса х.х.х.х, проверяю исходящий адрес - y.y.y.y. Чищу -

conntrack -D -s x.x.x.x

conntrack -D -d x.x.x.x

захожу тестовым компом и снова тот же отначеный y.y.y.y.

 

Может кто в курсе из каких условий выбирается nat ip если использовать --persistent? Не пнете в нужную сторону?

 

пс. можно насоздавать кучу ipset-ов и каждый натить на определенный ip. Но некрасиво (( А так сразу динамические адреса и всего 1 правило в iptables

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может кто в курсе из каких условий выбирается nat ip если использовать --persistent? Не пнете в нужную сторону?

По трем IP-адресам. Внутренний IP-адрес источника, внешний начальный, внешний конечный. Для себя накидал программку, на вход 3 ip на выходе внешний ip. Потом вокруг нее написал парсер правил iptables на питоне и теперь счастлив.

#include <stdio.h>
#include <stdint.h>

typedef uint8_t  u8;
typedef uint32_t u32;
typedef uint64_t u64;
#define JHASH_INITVAL           0xdeadbeef

u32 parseIp(char *ipStr)
{
       int i1, i2, i3, i4;
       sscanf(ipStr, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
       return (i1 << 24) + (i2 << 16) + (i3 << 8) + i4;
}

u32 rparseIp(char *ipStr)
{
       int i1, i2, i3, i4;
       sscanf(ipStr, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);
       return (i4 << 24) + (i3 << 16) + (i2 << 8) + i1;
}

static inline u32 rol32(u32 word, unsigned int shift)
{
       return (word << shift) | (word >> (32 - shift));
}

static inline u32 jhash_2words(u32 a, u32 b, u32 c)
{
       a += JHASH_INITVAL;
       b += JHASH_INITVAL;
       c ^= b; c -= rol32(b, 14);
       a ^= c; a -= rol32(c, 11);
       b ^= a; b -= rol32(a, 25);
       c ^= b; c -= rol32(b, 16);
       a ^= c; a -= rol32(c, 4);
       b ^= a; b -= rol32(a, 14);
       c ^= b; c -= rol32(b, 24);
       return c;
}

int main(int argc, char *argv[]) {
       if (argc < 4) {
               printf("fail");
       }
       u32 minip, maxip, srcip, j, result;
       minip = parseIp(argv[1]);
       maxip = parseIp(argv[2]);
       srcip = rparseIp(argv[3]);
       j = jhash_2words(srcip, 0, 0);
       j = ((u64)j * (maxip - minip + 1)) >> 32;
       result = minip + j;
       printf("%d.%d.%d.%d\n", (u8)(result >> 24), (u8)(result >> 16), (u8)(result >> 8), (u8)result);
       return 0;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

дык русским по белому же вам в соседнем топике ответили:

потом запилили туда рандом и теперь только сливать трансляции

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

теперь только сливать трансляции

 

 

Не рандом точно! Внешний адрес трансляции не меняется! Просто формулу поменяли похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT?

Ну и собственно интересно как мониторить, что IP досыпать надо..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я смотрел, даже патчил, по хешу насколько я помню. Оно достаточно долго может прожить на небольшом количестве, главное чтоб не было много коннектов к одинаковому dst ip/port с небольшого количества адресов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT?

Ну и собственно интересно как мониторить, что IP досыпать надо..

 

Не так давно была темка здесь, там выяснили что до ядра 3.3 (вроде бы) был просто хеш и можно было точно определить какой ip будет, потом добавили рандом

 

Поищите, там я выкладывал исходник на C для старых ядер чтобы вычислять какой public ip будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну вычислить кто во что натился можно с помощью ipt_NETFLOW

Данный модуль умеет NAT Events и работает шустрее, чем conntrack(-tools) через нетлинк.

 

Меня именно как мониторить использование пулла скорее интерисует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так как народ обычно мониторит использование пулла?

 

Ну и ещё вопрос.. кто сколько PPS натил на линукс серверах в плане PPS/полосы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.