Назад | Перейти на главную страницу

IPTables DNAT WAN-интерфейс для размещенной виртуальной машины не работает, но DNAT для WAN IP успешно

Спасибо всем заранее!

Итак, вот ситуация:

1. domain0 имеет два сетевых адаптера (LAN = enp1s0f0, WAN = enp1s0f1)
2. vm0 домена 0 имеет IP = 10.4.4.10
3. ip_forward = 1 И пересылка всех интерфейсов = 1
4. ПЕРЕДАЧА WAN (dhcp от интернет-провайдера) -> интерфейс <- DNAT до 10.4.4.10
5. ПЕРЕДАЧА WAN (DHCP от ISP) -> IP <- DNAT до 10.4.4.10

Проблема в том! LAN! HTTP-трафик на domain.com не выполняется с (4) выше.
И! LAN! HTTP-трафик на domain.com преуспевает с (5) выше.

Было бы неплохо:

${IPTABLES} -t nat -A PREROUTING ${STATE_NEW_TCP} -p tcp -i ${if_WAN} --dport 80 -j DNAT --to-destination ${ip_VM0}:80

${IPTABLES} -t nat -A PREROUTING ${STATE_NEW_UDP} -p udp -i ${if_WAN} --dport 80 -j DNAT --to-destination ${ip_VM0}:80



Но это работает только:

MY_IP=22.22.222.22/24
${IPTABLES} -t nat -A PREROUTING ${STATE_NEW_TCP} -p tcp -d ${MY_IP} --dport 80 -j DNAT --to-destination ${ip_VM0}:80 ${IPTABLES} -t nat -A PREROUTING ${STATE_NEW_UDP} -p udp -d ${MY_IP} --dport 80 -j DNAT --to-destination ${ip_VM0}:80


В. Как правильно получить! LAN трафик! на domain.com (сайт размещен на VM0)?
В настоящее время iptables выполняет ПЕРЕДАЧУ перенаправления DNAT с интерфейса WAN (dhcp, назначенного провайдером) на виртуальную машину.
Любая помощь приветствуется. :)

Примечание: использование CentOS 7 (1611)

((РЕЗУЛЬТАТЫ ОТРАБОТАНЫ)) = Предоставляется только информация, относящаяся к вопросу.

Chain INPUT (policy DROP 2 packets, 120 bytes) ((RESULTS FILTERED))
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
    0     0 ACCEPT     udp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW udp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            10.4.4.10            state NEW tcp dpt:80
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            10.4.4.10            state NEW udp dpt:80

Chain FORWARD (policy DROP 0 packets, 0 bytes) ((RESULTS FILTERED))
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
    0     0 ACCEPT     udp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW udp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            10.4.4.10            state NEW tcp dpt:80
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            10.4.4.10            state NEW udp dpt:80

Chain PREROUTING (policy ACCEPT 7 packets, 689 bytes) ((RESULTS FILTERED))
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80 to:10.4.4.10:80
    0     0 DNAT       udp  --  enp1s0f1 *       0.0.0.0/0            0.0.0.0/0            state NEW udp dpt:80 to:10.4.4.10:80
    1    60 DNAT       tcp  --  *      *       0.0.0.0/0            22.22.222.22         state NEW tcp dpt:80 to:10.4.4.10:80
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            22.22.222.22         state NEW udp dpt:80 to:10.4.4.10:80

Chain POSTROUTING (policy ACCEPT 22181 packets, 1435K bytes)
 pkts bytes target     prot opt in     out     source               destination
 338K   73M MASQUERADE  all  --  *      enp1s0f1  10.2.2.0/24          0.0.0.0/0
16549 1086K MASQUERADE  all  --  *      enp1s0f1  10.4.4.0/24          0.0.0.0/0

domain0$ ip a ((RESULTS FILTERED))
2: enp1s0f0:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 10.2.2.1/24 brd 10.2.2.255 scope global enp1s0f0
       valid_lft forever preferred_lft forever
3: enp1s0f1:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 22.22.222.22/24 brd 255.255.255.255 scope global dynamic enp1s0f1
       valid_lft 87813sec preferred_lft 87813sec
4: xenbr0:  mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
    inet 10.4.4.1/24 brd 10.4.4.255 scope global xenbr0
       valid_lft forever preferred_lft forever
9: vm0-emu:  mtu 1500 qdisc pfifo_fast master xenbr0 state UNKNOWN qlen 1000
    link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff
10: vm0:  mtu 1500 qdisc mq master xenbr0 state UP qlen 32
    link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff

domain0$ brctl show
bridge name     bridge id               STP enabled     interfaces
xenbr0          8000.feffffffffff       no              vm0
                                                        vm0-emu

domain0$ cat /proc/sys/net/ipv4/ip_forward
1

domain0$ cat /proc/sys/net/ipv4/conf/*/forwarding ((RESULTS FILTERED))
1
1
1
1
1
1
1

domain0$ ls /proc/sys/net/ipv4/conf/ -l ((RESULTS FILTERED))
dr-xr-xr-x. 1 root root 0 May  2 15:31 all
dr-xr-xr-x. 1 root root 0 May  2 15:31 default
dr-xr-xr-x. 1 root root 0 May  2 18:08 vm0
dr-xr-xr-x. 1 root root 0 May  2 18:08 vm0-emu
dr-xr-xr-x. 1 root root 0 May  2 15:31 enp1s0f0
dr-xr-xr-x. 1 root root 0 May  2 15:31 enp1s0f1
dr-xr-xr-x. 1 root root 0 May  2 15:31 xenbr0

domain0$ uname -a ((RESULTS FILTERED))
Linux hostname 4.9.13-22.el7.x86_64 #1 SMP Sun Feb 26 22:15:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

vm0$ ip a
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.4.4.10/24 brd 10.4.4.255 scope global eth0

Это ожидаемое поведение.

«-i $ {if_WAN}» соответствует только пакетам, которые входят в поле в интерфейсе «WAN». Пакеты от хостов LAN не поступают на этот интерфейс, поэтому они никогда не соответствуют правилу.

К сожалению, я не думаю, что iptables может соответствовать «пакетам, предназначенным для ip-адреса $ {if_WAN}», поэтому вы застряли в жестком кодировании своего WAN IP в правилах iptables.

Я не видел записей MASQUERADE в iptables config. Основываясь на предоставленной вами информации, я предполагаю, что вы включили MASQUERADE на enp1s0f1 для LAN, но не включил его для сети LAN на enp1s0f0Вот почему ваш NAT не работает для WAN и не работает для LAN.