Транспортный уровень: трансляция адресов
Долги за прошлую лекцию
(Пропала примерно половина прошлой лекции, но, возможно, всё равно надо оставить две темы)
Другие варианты транспорта?
TCP |
vs |
UDP |
есть |
подключение |
нет |
есть |
подтверждения |
нет |
есть |
отслеживание цельности потока |
нет |
есть |
отслеживание качества потока |
нет |
несколько |
количество пакетов |
один |
А ещё?
- Порядок / поток нужен
- Цельность желательна, но не полученные вовремя пакеты уже не важны (напр., видео или синхронизация игровых вселенных)
- (also, DCCP+UDP для очень старых сетевых устройств)
SCTP:
Несколько потоков в одном сеансе (порядок потоков не важен)
- двусторонняя готовность к сеансу (4-way handshake вместо 3-way — для отсечения syn flood)
- multihoming (наконец-то из ID транспортного уровня открутили IP: абоненты рассказывают все свои адреса, а ID служит т. н. «association» и порт)
- Дешёвая (не порождающая паразитного трафика) / управляемая / прогнозируемая защита от забивания канала
RSVP (IPv6)
- Резервирование объёмов / пропускной способности / других свойств на всём маршруте
- …
Netcat и Socat
Netcat — приём-передача данных по сети на стандартный В/В
- Установление TCP-подключения / Однократный приём подключения на TCP-порту
- Установление и приём UDP-«подключения»
- Проблема «окончания сеанса» (нет никакого сеанса, просто поток датаграмм, так что убивать руками)
- немножко умеет в Unix domain сокеты (сокеты в файловой системе)
Socat — приём-передача данных по сети самыми разнообразными способами
руководство, есть статьи попроще ☺
- Главное — не бояться ☺
NAT
Network address translation — что такое и зачем нужно.
NAT без транспортного уровня
Идея замены конкретного IP другим конкретным IP (и обратно) — например, если «внутренний» IP из интернет-диапазона.
Это всё уже не работает, потому что не нужно
- Работает только 1:1
- Actually, не работает
NAT с идентификацией потока (NAPT)
Динамическая подмена IP на основании «состояния»
- Таблица: пара IP + идентификатор «состояния»
- Может работать N:1, M:N
- Destination NAT (например, для отдельного веб-сервера)
- Идентификаторы — всё, что можно извлечь из пакетов
- TCP: 2 порта + 2 IP (+ initial SeqN?)
- DNS (UDP): DNS Query ID (поле прикладного уровня!) + 2 порта + 2 IP
- NTP (UDP): Originator Timestamp (поле прикладного уровня!) + 2 порта + 2 IP
- ping: ICMP-serial (поле сетевого уровня) + IP
- …
- Проблема коллизий SEQN / портов / идентификаторов в вариантах N/1 и M/N:
- Два хоста (A и B идут на один и тот же порт хоста C через NAT):
- У них могут совпасть порты отправителя:
- A:1234 → C:80; B:1234 → C:80
=> коллизия
- Оок, введём в идентификатор ещё seqn:
- A:1234, seqn 4321 → C:80; B:1234, seqn 34234 → C:80
=> вероятность коллизии?
Ещё про VirtualBox
- Вместо telnet можно использовать
socat -,cfmakeraw,echo=0,escape=15 TCP4:localhost:порт
- — то же, что и STDIO:
cfmakeraw — raw режим (с control flow)
echo=0 — не отображать символы сразу при вводе
escape=15 — символ с кодом 15 (Ctrl+O) закрывает ввод
VBoxManage:
modifyvm
clonevm
startvm
controlvm … acpipowerbutton
unregistervm … --delete
Примеры SNAT и DNAT
SNAT — при отсылке «наружу» (например, из intranet-диапазона)
- Кстати, MASQUERADE — это на случай динамического IP, при формировании conntrack-а всякий IP раз запрашивается у интерфейса
DNAT — при приёме (например, межсетевой экран на одной машине, а веб-сервер — внутри сети, на другой)
- Т. н. «проброс портов»
- Работа с iptables (первая попытка ☺)
/proc/net/nf_conntrack и утилита conntrack
Syn flood атака и SYNPROXY
- Суть: на каждый SYN в ядре выделяется приличная структурка. Можно заDOS-ить большим потоком безответственных SYN-ов.
- Решение: разделить МЭ и сервер, и до сервера доносить только «хорошие» SYN-ы, точнее — SYN-SYNACK-ACK-и всей пачкой (частичное проксирование)
- Требует более сложной логики
- Требует подмены SEQN (потому что мы всё ещё не знаем, какую SEQN выберет сервер, но уже «проиграли» для него 3WH)
Д/З
В образе — немного косметических правок и «запрещённый» shell-сценарий xtermresize. Запрещённый он потому, что им нельзя пользоваться до / во время составления отчётов.
- Ещё shell-сценарии из лекции (ни на что не претендующие, вдруг понадобятся):
vbsnap — для быстрого создания клона
создаёт снапшот vbsnap базовой машины, а уж из него делает клоны
- клон создаётся в той же группе, что и базовая машина
Например, наш образ — в группе LinuxNetwork2022
параметры: vbsnap base clone [port] [intnet1 intnet2 intnet3]
base — ID или имя базовой машины
clone — имя клона
port — порт для проброса TCP/COM
- Если не указать, подберётся автоматически 2300 + количество виртуалок в группе
intnetN — к какой сети типа intnet подключать сетевой адаптер ethN
- Если не указать, останется неподключённым
Пример: vbsnap "ALT minimal" router intnet deep
vbconnect — для подключения TCP/COM (по имени или по номеру порта)
Закомментируйте строки, содержащие functions.locate и _XTERM_Title
vbintnets — какие внутренние сети используются запущенными виртуалками
Задание 7
- Суть: воспроизвести пример из лекции, с выходным NAT-ом и пробросом порта.
- Площадка (сетевые адреса настроены заранее, в отчёт не входят)
A — адрес clienta
B — адрес clientb
R — «внешний» адрес router
- Отчёт:
report 7 router
Настроить исходящий NAT на интерфейсе eth1, который работал бы для A и B (Например, для всей их сети)
Настроить проброс порта 1234 при подключении к R на порт 1234 адреса B
Запустить tcpdump на «внешнем» интерфейсе, который отловит столько TCP-пакетов, чтобы были видны оба TCP-соединения (возможно, не до конца), но успеет остановиться сам
report 7 clientb
- Принять одно TCP-соединение на порт 1234
report 7 srv
Принять одно TCP-соединение на порт 1212 (в tcpdump на router-е должно быть видно, что это соединение от R, потому что SNAT)
report 7 clienta
Отправить несколько строк на порт 1212 хоста srv
(продолжение отчёта srv)
Отправить несколько строк на порт 1234 адреса R (его должен принять B, потому что DNAT)
Четыре отчёта (названия сохранить, должно быть: report.07.router, report.07.srv, report.07.clienta, report.07.clientb) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru