Jump to content

Recommended Posts

Posted (edited)

Наверное тема ближе гуру linux, создали мы значит сеть ipoe и встал вопрос о NAT, тут или варварское расходование IP пространства или тот самый NAT

В принципе все ничего работает да и ладно, но есть одно, очень большая часть активной молодой аудитории просят белый IP, решаем пока VPN PPtP.

Есть вариант с общим большим VLAN, но тоже как-то городить костыли. Ну вот собственно вопрос, реально ли на Linux поднять схему NAT, где трансляция будет происходить просто сопоставлением адресов.

Ну тоесть 1 IP серый сопоставлять с 1 IP белым.

Есть еще вариант на будущее, наравне с серыми адресами выдавать еще и ipv6 адреса, но... я думаю, дело это долгое будет

 

P.S. Кстати никто не в курсе, почему в GOS поддержки ipv6 нет

Edited by stelsik
Posted

Ivan Rostovikov, зачем что-то искать? Если речь идет про 1-to-1 NAT то все решается созданием двух правил - DNAT в PREROUTING-е (трафик к клиенту) и SNAT в POSTROUTING-е (трафик от клиента). Ядро Linux это не IOS, где нужно подбирать нужную версию. :)

 

Posted

>созданием двух правил

Мне это не помогло. iptables все равно распределял адреса - "как бог на душу положит".

И не факт, что найденная Вами правильная версия iptables соберется на имеющемся ядре. По этому и ядро приходится менять.

Posted

Ivan Rostovikov, зачем что-то искать? Если речь идет про 1-to-1 NAT то все решается созданием двух правил - DNAT в PREROUTING-е (трафик к клиенту) и SNAT в POSTROUTING-е (трафик от клиента).

А с NOTRACK это будет работать? Раз уж iproute nat устаревший.

Posted

И не факт, что найденная Вами правильная версия iptables соберется на имеющемся ядре.

А зачем что-то искать и собирать? Могу поспорить на что угодно, что на любом дистрибутиве это заработает сразу. Нужно создать всего два правила.

Posted
Ищите ядро и 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

Posted

SokolovS, очевидно, что 2000 правил. Вопросы масштабируемости я сейчас не рассматриваю. Но если нужно действительно много правил, то отсылаю сюда: http://nfws.inl.fr/nfws_userday/Jesper-Bro...es-rulesets.pdf

 

cmhungry, как в такой схеме работает активный FTP?

 

Posted

А с NOTRACK это будет работать? Раз уж iproute nat устаревший.

Не будет конечно. NAT средствами отличными от Netfilter-а я бы делать не стал. Хотя бы причине отсутствия в них helper-ов для "хитрых" протоколов.

Posted (edited)

Сейчас вот на одном таком NAT+шейп, 3к клиентов. В тепличных условиях, и ручками можно прописать, что и куда натить, весь вопрос в нормальном решении

Ищите ядро и iptables где есть "Full Cone NAT".

Говорят оно есть в природе.

А разве -j SAME не оно самое? просто как надо это не работет Edited by stelsik
Posted (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 by a_andry
Posted
А разве -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 генерирует.
Posted

Используем обе схемы: отдельный VLAN для публичников и Static NAT 1:1 на шлюзе.

Обе имеют свои достоинства и недостатки.

 

Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf:

BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp).

Не спас даже pfSync.

 

cmhungry, как в такой схеме работает активный FTP?
не знаю, не пробовал =)

Умные люди пишут, что хреново работает - http://dslnet.ru/showthread.php?t=71150
Posted
cmhungry, как в такой схеме работает активный FTP?
не знаю, не пробовал =)

Умные люди пишут, что хреново работает - http://dslnet.ru/showthread.php?t=71150

Это?
кстати, бимап весьма неудобен на практике, особенно при настройке FTP сервера
Маловато сведений из такой фразы можно вынести... А вопрос нужный и важный.
Posted

Тоесть чтобы сделать BiNAT, надо попробовать заскриптовать ipset iphash

Что-то не совсем мысли понял, как iphash натить, при этом добиваться совпадения 1 в 1

Posted
Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf:

BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp).

Не спас даже pfSync.

Затыкался под большой нагрузкой, или вообще не завелось?
Posted
Единственное препятствие, с которым пришлось столкнуться, когда NAT работал на FreeBSD+pf: BiNAT затыкался, если исходящий NAT делался на одном сервере, а входящий на другом(bgp).

Не спас даже pfSync.

Затыкался под большой нагрузкой, или вообще не завелось?

Под любой.

Клиенту назначалась скорость в мегабиты, а реально капали десятки килобит.

Если сервер один - тогда всё нормально.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.