[практика iptables] 07 эксперимент iptables NAT

В предыдущем разделе мы перенаправили машины в двух сегментах сети через сеть промежуточной машины для достижения совместимости. Давайте еще раз рассмотрим эту схему сетевого подключения.
Вставьте сюда описание изображения

В предыдущем разделе в эксперименте с брандмауэром мы установили правила переадресации хоста B. Сначала мы очистили правила переадресации хоста B.

[root@localhost ~]# iptables -F FORWARD

В это время A и C также могут общаться друг с другом.

1. СНАТ

Проверьте две сетевые карты хоста B.

[root@localhost ~]# ifconfig

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.106  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::db6e:9a5d:7349:6075  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:c4:c4:34  txqueuelen 1000  (Ethernet)
        RX packets 2132  bytes 878351 (857.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1802  bytes 417950 (408.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.0.11  netmask 255.255.0.0  broadcast 10.1.255.255
        inet6 fe80::6f7e:d360:eb44:50d2  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:21:7b:f0  txqueuelen 1000  (Ethernet)
        RX packets 3199  bytes 310848 (303.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3080  bytes 963634 (941.0 KiB)        

Хост C пингует хост A

[root@test-c ~]# ping 192.168.56.104
PING 192.168.56.104 (192.168.56.104) 56(84) bytes of data.
64 bytes from 192.168.56.104: icmp_seq=1 ttl=63 time=1.60 ms
64 bytes from 192.168.56.104: icmp_seq=2 ttl=63 time=1.81 ms
64 bytes from 192.168.56.104: icmp_seq=3 ttl=63 time=1.83 ms
64 bytes from 192.168.56.104: icmp_seq=4 ttl=63 time=1.61 ms

Хост A tcpdump проверяет сообщения icmp

[root@localhost ~]# tcpdump -i enp0s8 -nn icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
03:25:52.191447 IP 10.1.0.10 > 192.168.56.104: ICMP echo request, id 2681, seq 8, length 64
03:25:52.191525 IP 192.168.56.104 > 10.1.0.10: ICMP echo reply, id 2681, seq 8, length 64
03:25:53.192233 IP 10.1.0.10 > 192.168.56.104: ICMP echo request, id 2681, seq 9, length 64

Видно, что он подключен напрямую и IP не изменился.

Затем включите NAT на хосте B и проверьте сообщения tcpdump на хосте A.

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.56.106

На хосте A отображается 106 хост B, и запрос отправляется на эту машину.

[root@localhost ~]# tcpdump -i enp0s8 -nn icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
03:23:08.675793 IP 192.168.56.106 > 192.168.56.104: ICMP echo request, id 2663, seq 1, length 64
03:23:08.675845 IP 192.168.56.104 > 192.168.56.106: ICMP echo reply, id 2663, seq 1, length 64
03:23:09.677209 IP 192.168.56.106 > 192.168.56.104: ICMP echo request, id 2663, seq 2, length 64
03:23:09.677292 IP 192.168.56.104 > 192.168.56.106: ICMP echo reply, id 2663, seq 2, length 64

2. ДНКАТ

Установите правила переадресации на хосте B192.168.56.106 следующим образом.

[root@localhost ~]# iptables -t nat -I PREROUTING -d 192.168.56.106 -p tcp --dport 801 -j DNAT --to-destination 10.1.0.10:80

То есть доступ к порту 801 машины 106 перенаправит данные на порт 80 хоста C.
Хост C запускает службу httpd.
В это время хост A пытается получить к нему доступ.

[root@localhost ~]# curl -X GET http://192.168.56.106:801

Доступ к данным возможен.
В то же время проверьте сообщение с помощью tcpdump на хосте B.

[root@localhost ~]# tcpdump -i enp0s8 -p tcp port 801 -nn
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
05:06:16.442102 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [S], seq 2976570142, win 29200, options [mss 1460,sackOK,TS val 3328446820 ecr 0,nop,wscale 7], length 0
05:06:16.443153 IP 192.168.56.106.801 > 192.168.56.104.35408: Flags [S.], seq 2959350184, ack 2976570143, win 28960, options [mss 1460,sackOK,TS val 1165808246 ecr 3328446820,nop,wscale 7], length 0
05:06:16.445879 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [.], ack 1, win 229, options [nop,nop,TS val 3328446823 ecr 1165808246], length 0
05:06:16.446365 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [P.], seq 1:83, ack 1, win 229, options [nop,nop,TS val 3328446823 ecr 1165808246], length 82
05:06:16.447290 IP 192.168.56.106.801 > 192.168.56.104.35408: Flags [.], ack 83, win 227, options [nop,nop,TS val 1165808249 ecr 3328446823], length 0
05:06:16.448087 IP 192.168.56.106.801 > 192.168.56.104.35408: Flags [.], seq 1:14481, ack 83, win 227, options [nop,nop,TS val 1165808250 ecr 3328446823], length 14480
05:06:16.448587 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [.], ack 14481, win 455, options [nop,nop,TS val 3328446826 ecr 1165808250], length 0
05:06:16.450968 IP 192.168.56.106.801 > 192.168.56.104.35408: Flags [.], seq 14481:37649, ack 83, win 227, options [nop,nop,TS val 1165808252 ecr 3328446826], length 23168
05:06:16.451369 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [.], ack 37649, win 817, options [nop,nop,TS val 3328446829 ecr 1165808252], length 0
05:06:16.451483 IP 192.168.56.106.801 > 192.168.56.104.35408: Flags [P.], seq 37649:43441, ack 83, win 227, options [nop,nop,TS val 1165808253 ecr 3328446826], length 5792
05:06:16.452178 IP 192.168.56.104.35408 > 192.168.56.106.801: Flags [.], ack 43441, win 907, options [nop,nop,TS val 3328446829 ecr 1165808253], length 0

3. Акция МАСКАРАД

Выше мы описали SNAT, который представляет собой трансляцию исходного адреса, поэтому теперь давайте узнаем о действии, похожем на SNAT: MASQUERADE. Когда
мы подключаемся к Интернету, IP-адрес, назначаемый каждый раз, часто разный, и нам не будет назначен один в течение длительного времени. Фиксированный IP-адрес. Если в настоящее время мы хотим, чтобы узлы интрасети использовали общедоступный IP-адрес для доступа в Интернет, это будет очень хлопотно, потому что каждый раз, когда IP-адрес меняется, нам придется перенастраивать SNAT правила. Это отображение не очень удобно для пользователя. , мы можем решить эту проблему с помощью MASQUERADE. MASQUERADE будет динамически конвертировать исходный адрес в доступный IP-адрес. Фактически, функция, реализованная SNAT, точно такая же, оба изменяют источник адрес, но SNAT должен указать исходный адрес сообщения. Какой IP-адрес изменить, хотя MASQUERADE не нужно указывать явный IP-адрес, он будет динамически изменять исходный адрес сообщения на IP-адрес, доступный в указанной сети карты. Пример следующий:

[root@localhost ~]# iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -o enp0s8 -j MASQUERADE

Как показано на рисунке выше, мы указываем, что когда пакеты, исходящие через внешнюю сетевую карту, проходят через цепочку POSTROUTING, исходный адрес пакета будет автоматически изменен на IP-адрес, доступный на внешней сетевой карте. , даже если пакеты находятся на внешней сетевой карте. Даже если общедоступный IP-адрес изменится, исходный IP-адрес пакетов внутреннего хоста может быть нормально и динамически сопоставлен с соответствующим общедоступным IP-адресом.

MASQUERADE можно понимать как динамический и автоматизированный SNAT. Если нет необходимости в динамическом SNAT, нет необходимости использовать MASQUERADE, поскольку SNAT более эффективен.

4. Действие ПЕРЕНАПРАВИТЬ

Используйте действие REDIRECT, чтобы выполнить сопоставление портов на локальном компьютере.
Например, сопоставьте локальный порт 8081 с локальным портом 80.
Хост A (192.168.56.104) выполняет следующие настройки
: [root@localhost ~]# iptables -t nat - A PREROUTING -p tcp --dport 8081 -j REDIRECT --to-ports 80
После приведенного выше сопоставления правил, когда другие машины получают доступ к порту 8081 этой машины, пакеты будут перенаправлены на порт 80 этой машины.
Когда другие хосты получают доступ к следующему адресу (узел 104 предоставляет услуги через порт 80), они могут успешно запросить
[root@test-c ~]# curl -X GET http://192.168.56.104:8081.
Правила REDIRECT могут быть определены только в цепочка PREROUTING Или в цепочка OUTPUT.

5. Резюме

Чтобы облегчить будущий обзор, мы суммируем приведенные выше команды.

Если вы хотите, чтобы функция NAT работала правильно, вам необходимо включить основную функцию пересылки хоста Linux.

echo 1 > /proc/sys/net/ipv4/ip_forward
  • Операции, связанные с SNAT.
    Настройка SNAT может скрыть IP-адрес хоста в сети или предоставить общий доступ к общедоступному IP-адресу и доступу к Интернету. Если вы хотите поделиться только IP-адресом, вам нужно настроить только следующие правила SNAT.
    iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --IP-адрес общедоступной сети источника

Если IP-адрес общедоступной сети получается динамически и не фиксирован, вы можете использовать MASQUERADE для выполнения динамических операций SNAT. Следующая команда изменяет исходный IP-адрес пакетов в сегменте сети 10.1 на адрес, доступный на сетевой карте eth0.
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j МАСКАРАД

  • Операции, связанные с DNAT.
    Настройте DNAT для доступа к службам в локальной сети через общедоступный IP-адрес.
    Примечание. Теоретически, если правила DNAT настроены, эффект DNAT может быть достигнут без соответствующих правил SNAT.
    Однако при тестировании DNAT соответствующие правила SNAT также необходимо настроить, чтобы обеспечить нормальный DNAT. Сначала можно попытаться настроить только правила DNAT. Если DNAT не может работать должным образом, попробуйте добавить соответствующие правила SNAT. Просто настройте одно правило SNAT. Правила DNAT должны основываться на реальных условиях. Ситуация позволяет настроить различные правила DNAT.
iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号
iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 8080 -j DNAT --to-destination 
10.1.0.1:80iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP

Действие REDIRECT можно использовать при сопоставлении целевых портов на этом компьютере.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

После настройки вышеуказанных правил, когда другие машины получают доступ к порту 80 этой машины, они будут сопоставлены с портом 8080.

Guess you like

Origin blog.csdn.net/suyuaidan/article/details/133500776