pchol Posted October 30, 2009 Posted October 30, 2009 (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 October 30, 2009 by pchol Вставить ник Quote
voron Posted October 30, 2009 Posted October 30, 2009 Я так понимаю в таком варианте выдаются сопоставлений 1:1 и когда заканчиваются белые адреса из диапазона остальные клиенты идут лесом ? --persistent Gives a client the same source-/destination-address for each connection. Не сказано, что адрес выделенный. Вставить ник Quote
vitalyb Posted October 31, 2009 Posted October 31, 2009 Мы портировали SAME со старых версий ядер, это не сложно (пока). Вставить ник Quote
pchol Posted October 31, 2009 Author Posted October 31, 2009 Всё казалось гораздо лучше. --persistent работает как старый same. Сутки прошли, жалоб нет. Всем спасибо. Вставить ник Quote
a_andry Posted November 17, 2009 Posted November 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 ппс. для того, что-бы сразу по впн выдавать чесные адреса из пула не хватает адресов Вставить ник Quote
poofeg Posted September 23, 2012 Posted September 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; } Вставить ник Quote
sanyasi Posted January 20, 2016 Posted January 20, 2016 А под новые ядра писал кто-нибудь? Вставить ник Quote
NiTr0 Posted January 20, 2016 Posted January 20, 2016 дык русским по белому же вам в соседнем топике ответили: потом запилили туда рандом и теперь только сливать трансляции Вставить ник Quote
sanyasi Posted January 20, 2016 Posted January 20, 2016 теперь только сливать трансляции Не рандом точно! Внешний адрес трансляции не меняется! Просто формулу поменяли похоже. Вставить ник Quote
NiTr0 Posted January 20, 2016 Posted January 20, 2016 ну посмотреть сырцы ядра тогда... Вставить ник Quote
stalker86 Posted February 27, 2017 Posted February 27, 2017 Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT? Ну и собственно интересно как мониторить, что IP досыпать надо.. Вставить ник Quote
nuclearcat Posted February 27, 2017 Posted February 27, 2017 Я смотрел, даже патчил, по хешу насколько я помню. Оно достаточно долго может прожить на небольшом количестве, главное чтоб не было много коннектов к одинаковому dst ip/port с небольшого количества адресов. Вставить ник Quote
s.lobanov Posted February 28, 2017 Posted February 28, 2017 Спецы по ядрам - не смотрели как сейчас ядро выбирает IP под NAT? Ну и собственно интересно как мониторить, что IP досыпать надо.. Не так давно была темка здесь, там выяснили что до ядра 3.3 (вроде бы) был просто хеш и можно было точно определить какой ip будет, потом добавили рандом Поищите, там я выкладывал исходник на C для старых ядер чтобы вычислять какой public ip будет Вставить ник Quote
stalker86 Posted February 28, 2017 Posted February 28, 2017 Ну вычислить кто во что натился можно с помощью ipt_NETFLOW Данный модуль умеет NAT Events и работает шустрее, чем conntrack(-tools) через нетлинк. Меня именно как мониторить использование пулла скорее интерисует. Вставить ник Quote
stalker86 Posted March 11, 2017 Posted March 11, 2017 так как народ обычно мониторит использование пулла? Ну и ещё вопрос.. кто сколько PPS натил на линукс серверах в плане PPS/полосы? Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.