Centos 7 com 2 interfaces de rede na mesma rede, uma delas não responde ao ping do lado de fora

1

Eu tenho um centos7 acabado de instalar com 2 interfaces ativas na mesma rede como esta ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 40:a8:f0:1e:50:54 brd ff:ff:ff:ff:ff:ff
    inet 213.78.236.190/26 brd 213.78.236.191 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::42a8:f0ff:fe1e:5054/64 scope link
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 40:a8:f0:1e:50:55 brd ff:ff:ff:ff:ff:ff
4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 40:a8:f0:1e:50:56 brd ff:ff:ff:ff:ff:ff
    inet 213.78.236.175/26 brd 213.78.236.191 scope global eno3
       valid_lft forever preferred_lft forever
    inet6 fe80::42a8:f0ff:fe1e:5056/64 scope link
       valid_lft forever preferred_lft forever
5: eno4: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 40:a8:f0:1e:50:57 brd ff:ff:ff:ff:ff:ff

tabela de roteamento se parece com isso ip route show

default via 213.78.236.129 dev eno1
213.78.236.128/26 dev eno1  proto kernel  scope link  src 213.78.236.190
213.78.236.128/26 dev eno3  proto kernel  scope link  src 213.78.236.175

o problema é que eu tenho acesso apenas à interface com o 213.78.236.190 do mundo externo, ou seja, outra rede. Eu posso pingar, conectar ao ssh fazer o que for. Mas no 213.78.236.175 eu só posso conectar da rede local. Ele não responde ao ping do lado de fora, eu posso ver os pacotes chegando no tcpdump mas sem resposta.

iptables está limpo

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Eu sei que isso deve funcionar porque isso substitui um centos6 com configuração similar e no centos 6 trabalhado desde o início basta configurar o ip nas duas interfaces e o gw padrão em uma interface. Eu desabilitei o NetworkManager e suspeitei que ele estava bagunçando alguma coisa. Ativei o ip_forwarding em sysctl.conf

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

mesmo se eu não acho que preciso. Eu posso ver os pacotes icmp vindo de fora no tcpdump mas nada sai. Abaixo está o que acontece se eu pingar da máquina 213.65.165.84. O ip estou ping é 213.78.236.175

tcpdump -i eno3 -n -p| grep ICMP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno3, link-type EN10MB (Ethernet), capture size 65535 bytes
10:52:09.531494 IP 213.65.165.84 > 213.78.236.175: ICMP echo request, id 16686, seq 23, length 64
10:52:10.531489 IP 213.65.165.84 > 213.78.236.175: ICMP echo request, id 16686, seq 24, length 64
10:52:11.531492 IP 213.65.165.84 > 213.78.236.175: ICMP echo request, id 16686, seq 25, length 64
10:52:12.531483 IP 213.65.165.84 > 213.78.236.175: ICMP echo request, id 16686, seq 26, length 64

tcpdump -i eno1 -n -p| grep ICMP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 65535 bytes

e isso é o que acontece se eu pingar o outro ip 213.78.236.190 da mesma máquina

tcpdump -i eno1 -n -p| grep ICMP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), capture size 65535 bytes
10:58:45.973485 IP 213.65.165.84 > 213.78.236.190: ICMP echo request, id 16705, seq 5, length 64
10:58:45.973522 IP 213.78.236.190 > 213.65.165.84: ICMP echo reply, id 16705, seq 5, length 64
10:58:46.973483 IP 213.65.165.84 > 213.78.236.190: ICMP echo request, id 16705, seq 6, length 64
10:58:46.973515 IP 213.78.236.190 > 213.65.165.84: ICMP echo reply, id 16705, seq 6, length 64

Após o kasperd observado atualizei a postagem com o tcpdump com a opção -p para evitar o modo promíscuo e verifiquei no wireshark para ver se as requisições de ping chegam com o endereço mac correto. Então o problema parece ser que o kernel descarta os pacotes por algum motivo.

    
por Z R 13.11.2014 / 08:19

3 respostas

1

Embora você tenha mencionado que o iptables estava limpo, você mencionou que instalou recentemente o CentOS 7, por isso fiquei me perguntando se o software de firewall padrão do CentOS 7, firewalld, está ativo e, em caso afirmativo, se está bloqueando as respostas de eco do ICMP para uma de suas zonas. Por exemplo, se o firewalld estiver ativo, para sua GUI, a execução do firewall-config e a verificação do "Filtro ICMP" para cada zona mostrará se há algum filtro para "echo-request" e "echo-reply". Se estivesse bloqueando, você ainda poderia ver as solicitações de eco com o tcpdump. Você também pode verificar usando "firewall-cmd --list-all-zones", procurando a linha "icmp-blocks" para cada zona.

    
por 13.11.2014 / 17:33
1

O problema é uma alteração com o RHEL 6 e superior e as configurações do rp_filter alteradas no kernel. Olhe para link

    
por 07.08.2017 / 18:25
0

Eu posso pensar em uma explicação que corresponda a todos os sintomas descritos até agora. No roteador, uma entrada ARP estática foi configurada, mapeando esse endereço IP para o endereço MAC da interface em seu servidor antigo.

Quando os pacotes chegam de fora, o roteador não envia nenhuma solicitação ARP porque já possui uma entrada para esse endereço IP.

O switch ao receber os pacotes procurará o endereço MAC de destino em sua CAM, mas não o encontrará porque o antigo servidor com esse endereço MAC não está mais nessa rede. O switch, então, transmitirá os pacotes em todas as interfaces (exceto a que recebeu o pacote).

Quando você executa o tcpdump no servidor, a interface é, por padrão, alternada para o modo promíscuo. No modo promíscuo, todos os pacotes são exibidos, mesmo que o endereço de destino não esteja correspondendo. Se você usou o -p flag para o tcpdump, a interface de rede ignoraria esses pacotes e não os enviaria para o kernel.

O kernel envia os pacotes para o tcpdump, mas a pilha IP não os processa devido ao endereço MAC de destino errado.

Ao enviar uma solicitação de eco de outro host na LAN, a entrada ARP no roteador não afeta nada. O outro host enviará uma solicitação ARP e seu servidor enviará uma resposta ARP. Nesses casos, as solicitações de eco serão enviadas para o endereço MAC correto. Assim, as solicitações de eco serão vistas apenas pela interface correta e, como o endereço MAC de destino está correto, a pilha de IP processará esses pacotes.

    
por 13.11.2014 / 10:21