Andy52280 Posted October 22, 2010 Posted October 22, 2010 (edited) Появилась необходимость перевести NAT на платформу Linux (в основном из-за неадеквата в работе bonding(lagg/lacp) и ECMP(flowtable+radix_mpath) под нагрузкой во FreeBSD). Во FreeBSD сейчас создаются две таблицы в первой-белые IP, во второй - серые подсетки. Причем на один белый IP может натиться несколько серых сеток. Привязка белых IP - статическая. Входящий/исходящий интерфейсы не принципиальны - отрабатывает на все направления. Количество серых сеток порядка 15К. Во FreeBSD схема выходит достаточно лаконичной: ipfw table 14 add REAL_IP1 8868 ipfw table 15 add RFC1918_NET1 8868 ipfw table 14 add REAL_IP1 8868 ipfw table 15 add RFC1918_NET2 8868 ... ipfw table 14 add REAL_IPn 8xxx ipfw table 15 add RFC1918_NETm 8xxx ipfw nat 8868 config ip REAL_IP1 ... ipfw nat 8xxx config ip REAL_IPn ipfw add yyyy set 10 nat tablearg all from any to table(14) // IN NAT ... ipfw add zzzz set 10 nat tablearg all from table(15) to any // OUT NAT Подскажите, пожалуйста, каким образом ПРАВИЛЬНЕЕ реализовать подобную схему в Linux? Не хотелось бы городить под каждую пару REAL_IP/RFC1918_NET несколько правил в iptables да и минимизация нагрузки на CPU (2x Intel X5650) не помешает. Кроме того желательно иметь возможность на лету добавлять некий новый RFC1918_NETx на уже использующийся в текущих трансляциях NAT REAL_IP скриптом. На данный момент разбираюсь с Ubuntu-10.10 Server x86_64 (2.6.35-22-server) Edited October 22, 2010 by Andy52280 Вставить ник Quote
vitalyb Posted October 22, 2010 Posted October 22, 2010 А с чем связано именно такое разделение серых адресов по реальным? Может можно все серые отнатить на пул реальных адресов, а кому можно/нельзя натится определить фильтрами? Вставить ник Quote
Andy52280 Posted October 22, 2010 Author Posted October 22, 2010 А с чем связано именно такое разделение серых адресов по реальным? Может можно все серые отнатить на пул реальных адресов, а кому можно/нельзя натится определить фильтрами?Во-первых, не смотря на наличие СОРМ, периодически напрягают и ФСБ и МВД по конкретным реальникам. При статическом соответствии, скажем 8 клиентов (8 сеток /29) на 1 белый IP - сузить круг подозреваемых для углубленного анализа статистики достаточно просто. Учет статистики у нас ведется по серым адресам.Во-вторых, исторически так сложилось, что такая схема была удобнее на FreeBSD/ipfw и клиенты к ней уже привыкли. Многие используют реальники в фильтрах для системы клиент-банк (есть еще такие кривые банки, которые фильтруют клиентов по IP ). Впрочем, если схема нетривиально ложится на реализацию NAT в Linux - можно рассмотреть какой-нибудь альтернативный вариант. Но в идеале хотелось бы ее оставить. Вставить ник Quote
shicoy Posted October 22, 2010 Posted October 22, 2010 Примерно вот так: #Создаем хэш IPSET для внешнего IP xxx.xxx.88.68 ipset -N NET88_68 nethash ipset -A NET88_68 192.168.0.0/24 ipset -A NET88_68 192.168.0.1/24 ipset -A NET88_68 192.168.0.2/24 #натим iptables -m set -t nat -I POSTROUTING --set NET88_68 src -j SNAT --to-source xxx.xxx.88.68 Вставить ник Quote
Andy52280 Posted October 22, 2010 Author Posted October 22, 2010 iptables -m set -t nat -I POSTROUTING --set NET88_68 src -j SNAT --to-source xxx.xxx.88.68 Прошу прощения, если прошу разжевать азы, но если 1) нужно будет, скажем входящие пакеты на порт 80 реального IP xxx.xxx.88.68 пробросить на конкретный серый IP (192.168.0.10) из NET88_68, а входящие пакеты на порт 10080 - на IP 92.168.1.10 из NET88_68, то Какие правила нужно будет добавить в iptables для этой цели и не сломается ли при этом NAT для остальных IP из NET88_68? 2) нужно будет пробросить все пакеты, приходящие на IP xxx.xxx.88.68 и не имеющие соответствий в таблице conntrack, на конкретный серый IP (192.168.0.10) из NET88_68 Какие правила нужно будет добавить в iptables для этой цели и не сломается ли при этом NAT для остальных IP из NET88_68? Вставить ник Quote
fedusia Posted October 22, 2010 Posted October 22, 2010 Возможно вам необходимо почитать статью про iptables. Советую прочитать iptables tutorial. Может вот хватит данной ссылки http://www.opennet.ru/docs/RUS/iptables/ Вставить ник Quote
Ilya Evseev Posted October 22, 2010 Posted October 22, 2010 (edited) 1) нужно будет, скажем входящие пакеты на порт 80 реального IP xxx.xxx.88.68 пробросить на конкретный серый IP (192.168.0.10) из NET88_68, а входящие пакеты на порт 10080 - на IP 92.168.1.10 из NET88_68, тоКакие правила нужно будет добавить в iptables для этой цели iptables -t nat -N dnat1iptables -t nat -A dnat1 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10 iptables -t nat -A dnat1 -p tcp --dport 10080 -j DNAT --to-destination 192.168.1.10 iptables -t nat -A PREROUTING -i $INET_IFACE -d xxx.xxx.88.68 -j dnat1 и не сломается ли при этом NAT для остальных IP из NET88_68?не сломается. Edited October 22, 2010 by Ilya Evseev Вставить ник Quote
Andy52280 Posted October 22, 2010 Author Posted October 22, 2010 Спасибо. Картина проясняется. А относительно 2) как реализуется проброс адреса? и могул ли при этом полноценно работать оставшиеся IP из NET88_68? Вставить ник Quote
Ilya Evseev Posted October 22, 2010 Posted October 22, 2010 А относительно 2) как реализуется проброс адреса?Сильно экзотический вариант. Возможно,iptables -t nat -A PREROUTING -m conntrack --ctstate NEW -j DNAT --to-destination ... и могул ли при этом полноценно работать оставшиеся IP из NET88_68?Если в правиле указан конкретный IP, пакеты для/от остальных адресов в это правило не попадут. Вставить ник 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.