Jump to content

Recommended Posts

Posted (edited)

Использовал до недавнего времени 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

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

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

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

 

  • 3 weeks later...
Posted

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

-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

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

 

  • 2 years later...
Posted

Может кто в курсе из каких условий выбирается 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;
}

  • 3 years later...
Posted

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

потом запилили туда рандом и теперь только сливать трансляции
  • 1 year later...
Posted

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

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

Posted

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

Posted

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

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

 

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

 

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

Posted

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

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

 

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

  • 2 weeks later...
Posted

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

 

Ну и ещё вопрос.. кто сколько 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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.