stelsik Posted July 8, 2010 Posted July 8, 2010 (edited) Наверное тема ближе гуру linux, создали мы значит сеть ipoe и встал вопрос о NAT, тут или варварское расходование IP пространства или тот самый NAT В принципе все ничего работает да и ладно, но есть одно, очень большая часть активной молодой аудитории просят белый IP, решаем пока VPN PPtP. Есть вариант с общим большим VLAN, но тоже как-то городить костыли. Ну вот собственно вопрос, реально ли на Linux поднять схему NAT, где трансляция будет происходить просто сопоставлением адресов. Ну тоесть 1 IP серый сопоставлять с 1 IP белым. Есть еще вариант на будущее, наравне с серыми адресами выдавать еще и ipv6 адреса, но... я думаю, дело это долгое будет P.S. Кстати никто не в курсе, почему в GOS поддержки ipv6 нет Edited July 8, 2010 by stelsik Вставить ник Quote
stelsik Posted July 8, 2010 Author Posted July 8, 2010 и? проще попробую изложить мысли, надо /8 сократить до /20 причем с сопоставлением 1 в 1 Вставить ник Quote
Ivan Rostovikov Posted July 8, 2010 Posted July 8, 2010 Ищите ядро и iptables где есть "Full Cone NAT". Говорят оно есть в природе. Вставить ник Quote
shicoy Posted July 8, 2010 Posted July 8, 2010 Ищите ядро и iptables где есть "Full Cone NAT".Говорят оно есть в природе. Но никто не видел ) Вставить ник Quote
Умник Posted July 8, 2010 Posted July 8, 2010 Ivan Rostovikov, зачем что-то искать? Если речь идет про 1-to-1 NAT то все решается созданием двух правил - DNAT в PREROUTING-е (трафик к клиенту) и SNAT в POSTROUTING-е (трафик от клиента). Ядро Linux это не IOS, где нужно подбирать нужную версию. :) Вставить ник Quote
Ivan Rostovikov Posted July 8, 2010 Posted July 8, 2010 >созданием двух правил Мне это не помогло. iptables все равно распределял адреса - "как бог на душу положит". И не факт, что найденная Вами правильная версия iptables соберется на имеющемся ядре. По этому и ядро приходится менять. Вставить ник Quote
EvilShadow Posted July 8, 2010 Posted July 8, 2010 Ivan Rostovikov, зачем что-то искать? Если речь идет про 1-to-1 NAT то все решается созданием двух правил - DNAT в PREROUTING-е (трафик к клиенту) и SNAT в POSTROUTING-е (трафик от клиента). А с NOTRACK это будет работать? Раз уж iproute nat устаревший. Вставить ник Quote
Умник Posted July 8, 2010 Posted July 8, 2010 И не факт, что найденная Вами правильная версия iptables соберется на имеющемся ядре. А зачем что-то искать и собирать? Могу поспорить на что угодно, что на любом дистрибутиве это заработает сразу. Нужно создать всего два правила. Вставить ник Quote
cmhungry Posted July 8, 2010 Posted July 8, 2010 Ищите ядро и iptables где есть "Full Cone NAT".Говорят оно есть в природе. Но никто не видел ) binats = { '10.40.0.0/16' : '10.206.0.0/16', '10.41.0.0/16' : '10.126.0.0/16', '10.42.0.0/16' : '10.127.0.0/16', '10.43.0.0/17' : '10.128.0.0/17', '10.43.170.0/24' : '10.128.170.0/24', '10.44.0.0/17' : '10.129.0.0/17', '10.44.172.0/24' : '10.129.172.0/24', '10.45.0.0/16' : '10.130.0.0/16', '10.46.0.0/16' : '10.48.0.0/16', '10.47.0.0/17' : '10.128.128.0/17', '10.82.0.0/16' : '10.202.0.0/16', '10.83.0.0/16' : '10.203.0.0/16', '10.84.0.0/16' : '10.204.0.0/16', '10.85.0.0/16' : '10.229.0.0/16', '10.86.0.0/17' : '10.248.128.0/17', '10.87.0.0/17' : '10.129.128.0/17', } header = ( 'tc qdisc add dev eth1 ingress', 'tc qdisc add dev eth1 root handle 1: prio' ) priority = 10 flowid = 1 def make_rule (internal, external, pr, fl): print "tc filter add dev eth1 parent 1: protocol ip prio %d \\" % pr print " u32 match ip src %s flowid 1:%d action nat \\" % (internal, fl) print " egress %s %s" % (internal, external[:-3]) print "tc filter add dev eth1 parent ffff: protocol ip prio %d \\" % (pr + 1) print " u32 match ip dst %s flowid 1:%d action nat \\" % (external, (fl + 1)) print " ingress %s %s\n" % (external, internal[:-3]) for c in header: print c print for i in binats.keys(): our_net = i binat = binats[i] make_rule (our_net, binat, priority, flowid) priority = priority + 2 flowid = flowid + 2 Вставить ник Quote
SokolovS Posted July 8, 2010 Posted July 8, 2010 И сколько таких правил надо для 1000 абонентов например? Вставить ник Quote
Умник Posted July 8, 2010 Posted July 8, 2010 SokolovS, очевидно, что 2000 правил. Вопросы масштабируемости я сейчас не рассматриваю. Но если нужно действительно много правил, то отсылаю сюда: http://nfws.inl.fr/nfws_userday/Jesper-Bro...es-rulesets.pdf cmhungry, как в такой схеме работает активный FTP? Вставить ник Quote
Умник Posted July 8, 2010 Posted July 8, 2010 А с NOTRACK это будет работать? Раз уж iproute nat устаревший. Не будет конечно. NAT средствами отличными от Netfilter-а я бы делать не стал. Хотя бы причине отсутствия в них helper-ов для "хитрых" протоколов. Вставить ник Quote
stelsik Posted July 9, 2010 Author Posted July 9, 2010 (edited) Сейчас вот на одном таком NAT+шейп, 3к клиентов. В тепличных условиях, и ручками можно прописать, что и куда натить, весь вопрос в нормальном решении Ищите ядро и iptables где есть "Full Cone NAT".Говорят оно есть в природе. А разве -j SAME не оно самое? просто как надо это не работет Edited July 9, 2010 by stelsik Вставить ник Quote
a_andry Posted July 9, 2010 Posted July 9, 2010 (edited) А разве -j SAME не оно самое? same (-j SNAT --persistent в новых ядрах) не то. Вам же нужно выдавать один и тот же адрес, а same будет выдавать как попало после перегрузки компа. Тоже не понятно есть или нет аналог same для dnat. Даже если оно и есть, то непонятно как сделать соответствие 1 и того же адреса в snat и dnat. Имхо, нужно делать как говорил Умник, по 2 правила на пользователя. Что-бы нормально работало под нагрузкой можно скриптами расписать все по разным цепочкам. Например, через ipset в -t nat POSTROUTING отправлять первые 100 клиентов, которым нужен чесный адрес, в отдельную цепочку 1ClientSnat, в этой цепочке уже 100 правил ната для первых 100 клиентов, далее 2ClientSnat для следующих 100 и т.д. То же самое для dnat-а в -t nat PREROUTING - 1ClientDnat, 2ClientDnat ... В итоге получим для каждого пакета добавится только по +50-70 проверок (в среднем). Должно нормально работать под нагрузкой. Edited July 9, 2010 by a_andry Вставить ник Quote
Abram Posted July 9, 2010 Posted July 9, 2010 А разве -j SAME не оно самое? same (-j SNAT --persistent в новых ядрах) не то. Вам же нужно выдавать один и тот же адрес, а same будет выдавать как попало после перегрузки компа. Тоже не понятно есть или нет аналог same для dnat. Даже если оно и есть, то непонятно как сделать соответствие 1 и того же адреса в snat и dnat. Имхо, нужно делать как говорил Умник, по 2 правила на пользователя. Что-бы нормально работало под нагрузкой можно скриптами расписать все по разным цепочкам. Например, через ipset в -t nat POSTROUTING отправлять первые 100 клиентов, которым нужен чесный адрес, в отдельную цепочку 1ClientSnat, в этой цепочке уже 100 правил ната для первых 100 клиентов, далее 2ClientSnat для следующих 100 и т.д. То же самое для dnat-а в -t nat PREROUTING - 1ClientDnat, 2ClientDnat ... В итоге получим для каждого пакета добавится только по +50-70 проверок (в среднем). Должно нормально работать под нагрузкой. Умник говорил о гораздо меньшем количестве. Посмотрите, как lISG генерирует. Вставить ник Quote
cmhungry Posted July 9, 2010 Posted July 9, 2010 cmhungry, как в такой схеме работает активный FTP? не знаю, не пробовал =) Вставить ник Quote
Ilya Evseev Posted July 11, 2010 Posted July 11, 2010 Используем обе схемы: отдельный VLAN для публичников и Static NAT 1:1 на шлюзе. Обе имеют свои достоинства и недостатки. Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf: BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp). Не спас даже pfSync. cmhungry, как в такой схеме работает активный FTP?не знаю, не пробовал =) Умные люди пишут, что хреново работает - http://dslnet.ru/showthread.php?t=71150 Вставить ник Quote
EvilShadow Posted July 11, 2010 Posted July 11, 2010 cmhungry, как в такой схеме работает активный FTP?не знаю, не пробовал =) Умные люди пишут, что хреново работает - http://dslnet.ru/showthread.php?t=71150 Это?кстати, бимап весьма неудобен на практике, особенно при настройке FTP сервераМаловато сведений из такой фразы можно вынести... А вопрос нужный и важный. Вставить ник Quote
stelsik Posted July 12, 2010 Author Posted July 12, 2010 Тоесть чтобы сделать BiNAT, надо попробовать заскриптовать ipset iphash Что-то не совсем мысли понял, как iphash натить, при этом добиваться совпадения 1 в 1 Вставить ник Quote
kapa Posted July 12, 2010 Posted July 12, 2010 Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf:BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp). Не спас даже pfSync. Затыкался под большой нагрузкой, или вообще не завелось? Вставить ник Quote
Ilya Evseev Posted July 13, 2010 Posted July 13, 2010 Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf: BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp).Не спас даже pfSync. Затыкался под большой нагрузкой, или вообще не завелось? Под любой.Клиенту назначалась скорость в мегабиты, а реально капали десятки килобит. Если сервер один - тогда всё нормально. Вставить ник 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.