LINUX.ORG.RU
ФорумAdmin

Masquerading (NAT) with iptables

 , ,


0

2

Салют камрады! Что-то неладное с натом...

Есть серв с одним IP, на нем виртуалки. К виртуалкам нужен доступ из вне, делаю проброс портов по мануалу

cat /proc/sys/net/ipv4/ip_forward

1

 iptables -n -v -L -t nat --line-number
Chain PREROUTING (policy ACCEPT 9 packets, 836 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        1    52 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:2203 to:192.168.0.3:22
2        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:2203 to:192.168.0.3:22
3        2   104 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:13389 to:192.168.0.2:3389
4        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:5269 to:192.168.0.3:5269
5        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:5222 to:192.168.0.3:5222
6        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:5223 to:192.168.0.3:5223
7        1    60 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:80 to:192.168.0.4:80
8        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:2204 to:192.168.0.4:22
9        0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:8083 to:192.168.0.4:8083
10       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:8080 to:192.168.0.2:8080
11       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:8090 to:192.168.0.2:8090
12       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:80 to:192.168.0.4:80
13       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:2204 to:192.168.0.4:22
14       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:2203 to:192.168.0.3:22
15       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:1701 to:192.168.0.2:1701
16       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:4500 to:192.168.0.2:4500
17       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:500 to:192.168.0.2:500
18       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:1723 to:192.168.0.2:1723
19       0     0 DNAT       tcp  --  enp2s0 *       0.0.0.0/0            148.25.46.100       tcp dpt:47 to:192.168.0.2:47

Chain INPUT (policy ACCEPT 6 packets, 328 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 4 packets, 240 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 5 packets, 292 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 MASQUERADE  all  --  *      enp2s0  192.168.0.0/24       0.0.0.0/0

Видно, что PREROUTING срабатывает, и трафик перенаправляет. А вот маскарад не срабатывает, и обратно пакеты не идут

Делал по мануалу https://pve.proxmox.com/wiki/Network_Model

cat /etc/network/interaces

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp2s0
iface enp2s0 inet static
        address  148.25.46.100
        netmask  255.255.255.224
        gateway  148.251.46.97

iface enp2s0 inet6 static
        address  2a01:4f8:202:172::2
        netmask  64
        gateway  fe80::1

auto vmbr0
iface vmbr0 inet static
        address  192.168.0.1
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE



Последнее исправление: Ruslan (всего исправлений: 3)

Хорошо бы посмотреть tcpdump'ом, какие пакеты на интерфейс приходят, уходят, доходят ли они до виртуалок, что вируталки отвечают и т.п.

anarquista ★★★★★
()
Ответ на: комментарий от anarquista
 iptables -n -v -L --line-number
Chain INPUT (policy ACCEPT 104 packets, 12772 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 75 packets, 15275 bytes)
num   pkts bytes target     prot opt in     out     source               destination
Ruslan
() автор топика
Ответ на: комментарий от kostik87
 iptables-save
# Generated by iptables-save v1.6.0 on Thu Apr 19 11:53:28 2018
*filter
:INPUT ACCEPT [289:45922]
:FORWARD ACCEPT [2:104]
:OUTPUT ACCEPT [239:65857]
COMMIT
# Completed on Thu Apr 19 11:53:28 2018
# Generated by iptables-save v1.6.0 on Thu Apr 19 11:53:28 2018
*nat
:PREROUTING ACCEPT [1957:225108]
:INPUT ACCEPT [1536:81463]
:OUTPUT ACCEPT [106:6294]
:POSTROUTING ACCEPT [130:7530]
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 2203 -j DNAT --to-destination 192.168.0.3:22
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 2203 -j DNAT --to-destination 192.168.0.3:22
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 13389 -j DNAT --to-destination 192.168.0.2:3389
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 5269 -j DNAT --to-destination 192.168.0.3:5269
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 5222 -j DNAT --to-destination 192.168.0.3:5222
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 5223 -j DNAT --to-destination 192.168.0.3:5223
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.4:80
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 2204 -j DNAT --to-destination 192.168.0.4:22
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 8083 -j DNAT --to-destination 192.168.0.4:8083
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.2:8080
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 8090 -j DNAT --to-destination 192.168.0.2:8090
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.4:80
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 2204 -j DNAT --to-destination 192.168.0.4:22
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 2203 -j DNAT --to-destination 192.168.0.3:22
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 1701 -j DNAT --to-destination 192.168.0.2:1701
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 4500 -j DNAT --to-destination 192.168.0.2:4500
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 500 -j DNAT --to-destination 192.168.0.2:500
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 192.168.0.2:1723
-A PREROUTING -d 148.25.46.100/32 -i enp2s0 -p tcp -m tcp --dport 47 -j DNAT --to-destination 192.168.0.2:47
-A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE
COMMIT
# Completed on Thu Apr 19 11:53:28 2018
# Generated by iptables-save v1.6.0 on Thu Apr 19 11:53:28 2018
*mangle
:PREROUTING ACCEPT [10009:1576493]
:INPUT ACCEPT [9529:1429555]
:FORWARD ACCEPT [58:3064]
:OUTPUT ACCEPT [10371:3260211]
:POSTROUTING ACCEPT [10429:3263275]
COMMIT
# Completed on Thu Apr 19 11:53:28 2018

Ruslan
() автор топика
Ответ на: комментарий от Ruslan

Это я уже менял, всмысле пробовал и так:

-A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE

и так

-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE

Ruslan
() автор топика
Ответ на: комментарий от Ruslan

Маскарадинг для соединений прошедших DNAT не нужен (за очень редким исключением).

"-A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE" вообще странно выглядит.

К каким пакетам он должен применяться ? У тебя пакеты идущие из подсети подключенной к vmbr0 не могут попадать в подсеть подключенной к vmbr0

Посмотри что говорит «conntrack -L » на перенаправленные порты

vel ★★★★★
()
Ответ на: комментарий от vel

Маскарадинг для соединений прошедших DNAT не нужен (за очень редким исключением).

В целом да.
Но вдруг виртуалкам все-таки нужен доступ в инет? :)

ТС А из виртуалок есть доступ в инет при правиле
-A POSTROUTING -s 192.168.0.0/24 -o enp2s0 -j MASQUERADE
?
А то может с роутингом что-то не так?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.