The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

NAT, трансляция адресов

   Корень / Администратору / Сетевая подсистема, маршрутизация / NAT, трансляция адресов

----* Определение IP-адреса пользователя в Telegram через голосовой вызов (доп. ссылка 1) (доп. ссылка 2)   [комментарии]
 
По умолчанию Telegram устанавливает прямой канал связи при осуществлении
голосового вызова пользователя, присутствующего в адресной книге (в настройках
можно выборочно отключить использование P2P и направлять трафик только через
внешний сервер). При инициировании соединения для обхода NAT в Telegram
применяется протокол STUN (Session Traversal Utilities for NAT), который
передаёт информацию об адресах звонящего и принимающего звонок в поле
XOR-MAPPED-ADDRESS. Соответственно, если в настройках "Security and Privacy" не
отключён P2P, звонящий может узнать IP-адрес того, кому адресован звонок. Метод
подойдёт и для любых других приложений, использующих STUN.

Для определения IP-адреса следует  во время осуществления вызова записать дамп
трафика в формате pcap, например, при помощи утилиты tcpdump или tshark, после
чего воспользоваться готовым скриптом
https://github.com/n0a/telegram-get-remote-ip/ или при помощи штатных утилит
проанализировать значение поля XOR-MAPPED-ADDRESS:

   tshark -w dump.pcap -a duration:5
   cat dump.pcap | 
     grep "STUN 106" | 
     sed 's/^.*XOR-MAPPED-ADDRESS: //' | 
     awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' |
     awk '!seen[$0]++'
 
----* Мультиплексирование ssl/ssh соединений через один 443 порт (доп. ссылка 1)   [комментарии]
 
В рамках проекта sslh (http://www.rutschle.net/tech/sslh.shtml) развивается
мультиплексор ssl/ssh соединений, способный принимать соединения на одном порту
и перебрасывать их в зависимости от типа протокола. Поддерживается широкий
спектр протоколов, среди которых  HTTP, HTTPS, SSH, OpenVPN, tinc и XMPP.
Наиболее востребованным применением sslh является обход межсетевых экранов,
допускающих только ограниченное число открытых портов.

Например, запустив sslh за пределами межсетевого экрана на 443 порту, можно
организовать работу SSH и любых других протоколов: соединение с внешней системы
будет производиться на 443 порт, но пробрасываться на локальный 22 порт, при
этом штатные HTTPS-запросы будут перебрасываться на localhost:443.

Для обеспечения работы такой схемы sslh следует запустить с опциями:

   sslh --user sslh --listen 192.168.10.15:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443

где, "--user sslh" определяет пользователя, под которым следует запустить sslh;
"--listen 192.168.10.15:443" - IP и порт для приёма внешних соединений;
"--ssh 127.0.0.1:22" - IP и порт для проброса SSH
"--ssl 127.0.0.1:443" - IP и порт для проброса HTTPS
 
----* Проброс 802.1q/access порта в Linux через IP-сеть   Автор: Roman Timofeev  [комментарии]
  В 2007 году я написал [[http://www.opennet.ru/tips/info/1389.shtml заметку]] с похожим названием.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Выявление NAT-устройства в сети   Автор: Kirill  [комментарии]
 
Значения TTL в популярных ОС известны
(http://www.binbert.com/blog/2009/12/default-time-to-live-ttl-values/), например,
 в Linux 2.6.x и FreeBSD - 64, в Windows - 128.

Если в сети имеется маршрутизатор на базе *nix или если есть возможность
завернуть трафик на определенный хост, или настроен PBR на прозрачный прокси -
на этой машине нужно выполнить:

   # tcpdump -vv -n -i @interface@ 'ip[7:2] != 128 and ip[7:2] != 64'

Соответственно, если пакеты приходят с вашего маршрутизатора после PBR,
значение TTL нужно уменьшить на 1.
Но эта информация неточная, так как TLL в ОС можно поменять.
Также полезным дополнением внутри этой команды будет 'src net @ваша внутренняя
сеть@' и 'src net not @сеть, которую нужно исключить@'.
 
----* Организация доступа к IPTV через NAT (доп. ссылка 1)   Автор: Антон Каукин  [комментарии]
  Инструкция для желающих настроить Multicast Routing на Linux шлюзе, обеспечивающем работу клиентов через NAT. Для переброса IGMP-трафика между подсетями будем использовать демон igmpproxy (http://sourceforge.net/projects/igmpproxy)
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Настройка пакетного фильтра PF для проброса SIP-телефонов через NAT (доп. ссылка 1) (доп. ссылка 2)   Автор: argo  [комментарии]
  Во FreeBSD для включения PF указываем в /etc/rc.conf:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Трансляция адресов во FreeBSD средствами ng_nat (доп. ссылка 1)   Автор: Folio  [комментарии]
  Для работы этого примера необходимо иметь подгруженный ng_ipfw.ko
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)   Автор: reZon  [комментарии]
  Для начала надо пересобрать ядро со следующими опциями
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Интернет-шлюз с использованием PF   Автор: vitalic  [комментарии]
  O пакетном фильтре (PF) написано довольно много статей. Вот и я хочу предложить свою реализацию Интернет-шлюза с использованием PF. Раздача Интернета для локальной сети происходит через NAT и основана на Packet Tagging. Плюсом этого метода является то что упрощается настройка правил для FTP (ftp-proxy не используется), как для клиентов за шлюзом, так и для возможной публикации "внутреннего" ftp-сервера в мир.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* ipfw nat во FreeBSD 7   Автор: Pikador  [комментарии]
  В конфигурацию ядра добавляем:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Настройка работы ipnat под большой нагрузкой (доп. ссылка 1)   Автор: Антон Южанинов  [комментарии]
 
Для работы ipnat под большой нагрузкой (много трансляций) нужно 
перед сборкой ядра изменить в файле /usr/src/sys/contrib/ipfilter/netinet/ip_nat.h 

   #undefine LARGE_NAT

на
 
   #define LARGE_NAT
 
----* Балансировка двух каналов средствами ipfw под FreeBSD   Автор: Ivan Voytas  [комментарии]
 
natd -p 8668 -a ip1 
natd -p 8669 -a ip2 

ipfw add divert 8668 ip from any to ip1 recv if1 
ipfw add divert 8669 ip from any to ip2 recv if2 
ipfw add check-state 
ipfw add prob 0.5 divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state 
ipfw add divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state 
ipfw add fwd gw1 ip from ip1 to any out xmit if1 (если default на if1) 
ipfw add fwd gw2 ip from ip2 to any out xmit if1 
 
----* В двух словах про включение NAT и Firewall в ОС FreeBSD (доп. ссылка 1)   Автор: hub.ru  [комментарии]
  Что бы поднять NAT и Firewall на FreeBSD надо:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* pf и трансляция адресов на двух интерфейсах   Автор: DelGod  [комментарии]
  Решение оптимизировано для шлюза на флешке (не используется perl и другие "тяжелые" решения)
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Проброс портов с двух различных gateway на внутренний сервер через IPNAT   Автор: Жека  [комментарии]
 
Иногда необходимо пробросить порты с двух различных gateway GW1 и GW2 на один внутренний сервер, 
у которого в качестве default GW указан GW1.
Прямой проброс и NAT невозможен, т.к. пакеты пришедшие из GW2 попытаются
вернуться по маршруту через GW1.
Есть следующий выход, это двойной NAT на GW2, при котором запрос приходит не
снаружи, а с внутреннего IP.

ed0 - внешний интерфейс
lnc0 - интерфейс смотрящий внутрь.

в ipnat.rules нужно прописать следующее:
   map ed0 10.6.10.0/24 -> 0.0.0.0/32 мапим локалку наружу
   map lnc0 0.0.0.0/0 -> 0.0.0.0/32 ремап внешних ip в локальные
   rdr ed0 0.0.0.0/0 port 80 -> 10.6.10.2 port 80 tcp форвард на внутренний сервер
 
----* Пример настройки NAT для двух сетей в FreeBSD 5.3 (доп. ссылка 1)   Автор: Vov  [комментарии]
  Стоит задача - выпустить свою сеть в инет через два разных интерфейса rl1 и rl2. Так как адреса в локали серые, то надо поднимать NAT. С учетом того, что динамической маршрутизации не предвидится, будем поднимать NAT на 2 интерфейса. Для этого нужно:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Особенности использование ftp из-за фаервола ipfw/natd   Автор: globus  [комментарии]
 
Необходимо выпустить пользователей на ftp сайты из локальной сети, но при этом не устанавливая 
дополнительного ПО, используя только возможности FreeBSD 4.10.
Этими возможностями, как ни странно, оказались ipfw и natd 
вот собственно как все это прописывается.

Исходные данные, FreeBSD 4.10 + настроенный nat правила для ipfw 
   ipfw -q add 100 divert natd from 192.168.20.0/24 to any 20, 21 out via $oif 
   ipfw -q add 200 divert natd from any 20, 21 to $iip in via $oif 
   ipfw -q add 300 allow tcp from any to any established 
   ipfw -q add 400 allow tcp from any to any setup 
где $oif и $iip соответственно внешний интерфейс и внешний IP 

теперь запускаем natd 
   /sbin/natd -m -s -u -punch_fw 500:200 -n xl1

заострю внимание на параметре "-punch_fw" -этот параметр создает в фаерволе "ходы", 
добавляя динамические правила. В моем случае эти правила начнутся с номера 500
и будет их добавлено
максимум 200 (понятно чем больше сеть, те больше нужно правил).

Особое спасибо A Clockwork Orange.
 
----* Как в FreeBSD перебросить соединение через NAT во внутреннюю сеть  (доп. ссылка 1)   Автор: spanka  [комментарии]
 
 Вот реализация для ipfw:
if1IP="ип_смотрящий_в_инет", if1="интерфейс_смотрящий_в_инет"
ifLIP="ип_на_который хотим делать редирект"
  ipfw add divert natd tcp from any to ${if1IP} 80 via ${if1}
  ipfw add divert natd ip from any to ${ifLIP} to any via ${if1}
  ipfw add allow tcp from any to ${if1IP} 80 via any
  natd -n ${if1} -redirect_port tcp ${ifLIP}:80 80

Решение от miaso <torov@wipline.ru>:
  tproxy -s 80 -r nobody -l /var/log/transparent_proxy.log [int_ip] 80 
 
----* Как в Linux перебросить соединение через NAT во внутреннюю сеть (доп. ссылка 1)   Автор: Dimez  [комментарии]
 
Первый путь - пробрасывание только порта:
  1) iptables -t nat -A PREROUTING -p tcp -d EXT_R_IP --dport 10000 -j DNAT --to-destination LOCAL_IP:80
  2) iptables -A FORWARD -i eth0 -d LOCAL_IP -p tcp --dport 22 -j ACCEPT

Второй вариант - выброс всей машины наружу (если есть свободные адреса):
  1) ifconfig eth0:0 NEW_IP netmask NETMASK broadcast BROADCAST
  2) route add NEW_IP gw GW netmask 0.0.0.0 metric 1 dev eth0:0
  3) iptables -t nat -A PREROUTING -p tcp -d NEW_IP -j DNAT --to-destination LOCAL_IP
  4) iptables -A FORWARD -i eth0 -d LOCAL_IP -j ACCEPT

Обозначения: EXT_R_IP - внешний IP роутера, LOCAL_IP - внутренний IP машины,
которую хочешь выбросить
  NEW_IP - новый IP на который хочешь посадить машину, которая имеет локальный LOCAL_IP
  NETMASK, BROADCAST, GW - внешние netmask, broadcast и gateway
 
----* Пример настройки NAT с привязкой к IP под Linux   [комментарии]
 
Пример настройки NAT с привязкой к IP под Linux

  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -o eth0 -j SNAT --to-source 212.23.98.45

или (без привязки к IP)

  ipchains -A forward -j MASQ -s 192.168.0.0/16 -d 0.0.0.0/0
или (через iproute2)

  ip rule add from 10.0.1.0/24 nat 254.147.38.14

Другой способ трансляции адресов:

  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -j MASQUERADE
 
----* Как организовать редирект порта на внутреннюю машину через ipnat в FreeBSD.   [комментарии]
 
man 5 ipnat  в /etc/ipnat.conf:
  rdr fxp0 205.15.63.3/32 port 80 -> 192.168.1.1 port 80 tcp
# Базансировка нагрузки между 2 IP:
  rdr le0 203.1.2.3/32 port 80 -> 203.1.2.3,203.1.2.4 port 80 tcp round-robin
 
----* Как настроить NAT (транслятор адресов) для нормальной работы с FTP и ICQ в Linux   [комментарии]
 
iptables:
   modprobe iptable_nat
   modprobe ip_conntrack_ftp
   modprobe ip_nat_ftp                     
   modprobe ip_nat_irc
ipchains:
   modprobe ip_masq_ftp
   modprobe ip_masq_raudio
   modprobe ip_masq_irc
   modprobe ip_masq_icq
 
----* Как обеспечить работу active FTP режима в FreeBSD NAT   [обсудить]
 
В ipnat воспользуйтесь модулем ftp proxy:
  map fxp0 0/0 -> 0/32 proxy port ftp ftp/tcp
  map rl0 172.16.33.0/24 -> 212.46.231.50/32 proxy port ftp ftp/tcp
не забудьте поместить правило трансляции ftp перед общим правилом трансляции, 
порядок следования правил важен.
 
----* Как запустить трансляцию адресов (NAT) под FreeBSD   [комментарии]
  В /etc/rc.conf:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 

 Версия для печати





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру