Перейти к содержимому
Калькуляторы

Linux NAT

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

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

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

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

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

 

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

Изменено пользователем stelsik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и?

проще попробую изложить мысли, надо /8 сократить до /20 причем с сопоставлением 1 в 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Но никто не видел )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И сколько таких правил надо для 1000 абонентов например?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

А разве -j SAME не оно самое? просто как надо это не работет
Изменено пользователем stelsik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А разве -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 проверок (в среднем). Должно нормально работать под нагрузкой.

Изменено пользователем a_andry

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А разве -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 генерирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

не знаю, не пробовал =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Единственное препятствие, с которым пришлось столкнуться, когда 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.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.