lacost Опубликовано 24 ноября, 2010 · Жалоба Кто-то знает алгоритм трансляции адресов при использовании опции SNAT --persistent ? Когда использовали опцию --same - все было понятно. Когда перешли на --persistent - старый алгоритм не подходит. В итоге мне нужно зная ip отправителя и правило iptables - получить ip под которым выйдет пакет в свет. Смотрел в исходниках. Я в Си - полный ноль. Не смог разобраться =(( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pchol Опубликовано 24 ноября, 2010 · Жалоба Можно использовать -j NETMAP, там с алгоритмом всё предельно ясно. NETMAP is a new implementation of the SNAT and DNAT targets where the host part of the IP address isn't changed. It provides a 1:1 NAT function for whole networks which isn't available in the standard SNAT and DNAT functions. For example, lets say we have a network containing 254 hosts using private IP addresses (a /24 network), and we just got a new /24 network of public IP's. Instead of walking around and changing the IP of each and every one of the hosts, we would be able to simply use the NETMAP target like -j NETMAP -to 10.5.6.0/24 and voila, all the hosts are seen as 10.5.6.x when they leave the firewall. For example, 192.168.0.26 would become 10.5.6.26. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
lacost Опубликовано 24 ноября, 2010 · Жалоба у меня трансляция не 1:1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex_001 Опубликовано 25 ноября, 2010 · Жалоба Сам выбор: /* Hashing source and destination IPs gives a fairly even * spread in practice (if there are a small number of IPs * involved, there usually aren't that many connections * anyway). The consistency means that servers see the same * client coming from the same IP (some Internet Banking sites * like this), even across reboots. */ minip = ntohl(range->min_ip); maxip = ntohl(range->max_ip); j = jhash_2words((__force u32)tuple->src.u3.ip, range->flags & IP_NAT_RANGE_PERSISTENT ? 0 : (__force u32)tuple->dst.u3.ip ^ zone, 0); j = ((u64)j * (maxip - minip + 1)) >> 32; *var_ipp = htonl(minip + j); Тоесть алгоритм то несложный , но узнать под каким ip уйдет можно только выполнив вышеприведенный кусок кода(просто так не прикинуть - хеш всеже). Как вариант - написать мелкую утилитку для рассчета , но я так понимаю не совсем устроит? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Алексей Андриянов Опубликовано 25 ноября, 2010 · Жалоба у меня трансляция не 1:1 NETMAP не требует трансляции именно 1:1. Зато он строго регламентирует, в какой именно IP из пула будет транслирован src-адрес клиента. То, что вам нужно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...