pchol Опубликовано 30 октября, 2009 (изменено) Использовал до недавнего времени 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 Изменено 30 октября, 2009 пользователем pchol Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
voron Опубликовано 30 октября, 2009 Я так понимаю в таком варианте выдаются сопоставлений 1:1 и когда заканчиваются белые адреса из диапазона остальные клиенты идут лесом ? --persistent Gives a client the same source-/destination-address for each connection. Не сказано, что адрес выделенный. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 31 октября, 2009 Мы портировали SAME со старых версий ядер, это не сложно (пока). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pchol Опубликовано 31 октября, 2009 Всё казалось гораздо лучше. --persistent работает как старый same. Сутки прошли, жалоб нет. Всем спасибо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
a_andry Опубликовано 17 ноября, 2009 Есть внешние адреса на которые натятся абоненты. Переодически кого-то где-то банят и абоненты с одного адреса не могут достучатся до разных сайтов. Появилась идея - по -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 ппс. для того, что-бы сразу по впн выдавать чесные адреса из пула не хватает адресов Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
poofeg Опубликовано 23 сентября, 2012 Может кто в курсе из каких условий выбирается 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; } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 20 января, 2016 А под новые ядра писал кто-нибудь? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 20 января, 2016 дык русским по белому же вам в соседнем топике ответили: потом запилили туда рандом и теперь только сливать трансляции Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sanyasi Опубликовано 20 января, 2016 теперь только сливать трансляции Не рандом точно! Внешний адрес трансляции не меняется! Просто формулу поменяли похоже. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 20 января, 2016 ну посмотреть сырцы ядра тогда... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
stalker86 Опубликовано 27 февраля, 2017 Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT? Ну и собственно интересно как мониторить, что IP досыпать надо.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 27 февраля, 2017 Я смотрел, даже патчил, по хешу насколько я помню. Оно достаточно долго может прожить на небольшом количестве, главное чтоб не было много коннектов к одинаковому dst ip/port с небольшого количества адресов. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 28 февраля, 2017 Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT? Ну и собственно интересно как мониторить, что IP досыпать надо.. Не так давно была темка здесь, там выяснили что до ядра 3.3 (вроде бы) был просто хеш и можно было точно определить какой ip будет, потом добавили рандом Поищите, там я выкладывал исходник на C для старых ядер чтобы вычислять какой public ip будет Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
stalker86 Опубликовано 28 февраля, 2017 Ну вычислить кто во что натился можно с помощью ipt_NETFLOW Данный модуль умеет NAT Events и работает шустрее, чем conntrack(-tools) через нетлинк. Меня именно как мониторить использование пулла скорее интерисует. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
stalker86 Опубликовано 11 марта, 2017 так как народ обычно мониторит использование пулла? Ну и ещё вопрос.. кто сколько PPS натил на линукс серверах в плане PPS/полосы? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...