Não é possível montar o compartilhamento NFS entre sub-redes; Comandos rpcinfo falham de cliente para servidor, mesmo quando o iptables está aberto

1

Peço desculpas antecipadamente pela seguinte novela.

Eu tenho uma unidade USB conectada a um Raspberry Pi executando Raspbian; crashplan não funciona mais com Raspbian, infelizmente, então não posso fazer o backup no meu servidor Crashplan (criativamente chamado de "backup"). O que eu estou tentando fazer é que o NFS compartilhe o sistema de arquivos com o meu servidor Crashplan e deixe-o rsync para um sistema de arquivos local, mas não consigo montá-lo no servidor de backup.

"backup" é uma VM do CentOS 6 em execução no ESXi e está em uma sub-rede diferente da Pi; Estou usando o VyOS como um roteador. Até agora, geralmente está funcionando muito bem, mas eu suspeito que algo sobre o VyOS pode estar estragando tudo. O VyOS está configurado para rotear entre meu 10.47.6.0/24 (onde o pi é) e 10.47.7.0/24 (onde a maioria das minhas VMs está). Quando eu faço um rpcinfo do pi (ou de outro servidor na mesma sub-rede), é bem sucedido; quando eu faço isso da outra sub-rede eu recebo:

rpcinfo: can't contact portmapper: RPC: Unable to receive; errno = Connection reset by peer

Funciona também a partir da VM do VyOS.

O pi é o caminho para a minha rede (meu roteador Verizon encaminha certas portas para ele para acesso externo), e o iptables é configurado para bloquear a maioria das coisas. No entanto, ele está totalmente aberto para todas as portas nas minhas duas sub-redes:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  165.160.2.0/24       anywhere             tcp dpt:https
ACCEPT     all  --  localhost            anywhere
ACCEPT     all  --  10.47.6.0/23         anywhere
ACCEPT     tcp  --  165.160.32.0/24      anywhere             tcp dpt:ssh
ACCEPT     tcp  --  165.160.2.0/24       anywhere             tcp dpt:ssh
ACCEPT     all  --  10.8.0.0/24          anywhere
ACCEPT     udp  --  anywhere             anywhere             udp dpt:http-alt
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
LOGGING    all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain LOGGING (1 references)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere             limit: avg 2/min burst 5 LOG level warning prefix "IPTables-logged: "
DROP       all  --  anywhere             anywhere

O próprio VyOS não possui nenhum firewall configurado entre as duas sub-redes:

vyos@vyos:~$ show firewall

-----------------------------
Rulesets Information
-----------------------------
vyos@vyos:~$

Tem a configuração de roteamento mais básica possível:

vyos@vyos:~$ show configuration
interfaces {
    ethernet eth0 {
        address 10.47.6.11/24
        duplex auto
        hw-id 00:0c:29:de:e1:e1
        smp_affinity auto
        speed auto
    }
    ethernet eth1 {
        address 10.47.7.1/24
        duplex auto
        hw-id 00:0c:29:de:e1:eb
        smp_affinity auto
        speed auto
    }
    loopback lo {
    }
}
nat {
    source {
        rule 10 {
            outbound-interface eth0
            protocol all
            source {
                address 10.47.7.0/24
            }
            translation {
                address 10.47.7.0/24
            }
        }
    }
}
protocols {
    static {
        route 0.0.0.0/0 {
            next-hop 10.47.6.1 {
                distance 1
            }
        }
    }
}
<snippety snip snip>

Eu posso fazer ping em todo o lugar, posso ssh, posso acessar a web e outros serviços em execução na VLAN 10.47.7.0/24 em várias portas, portanto, não acho que tenha um problema de firewall. Mais importante, quando eu conecto um strace ao daemon rpcbind no meu pi, ele vê a conexão entrar e então o despeja por alguma razão que eu não sou inteligente o suficiente para traduzir dos dados de rastreio. Isso já é 5 vezes muito longo, então eu vou poupar você da saída strace completa, porque é idêntico antes de um certo ponto.

Quando eu me conecto com sucesso a partir do VyOS, o pi diz:

write(12, "0
write(12, "0
root@splunk:~> rpcinfo -p pi
program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp  60044  status
100024    1   tcp  55702  status
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    2   tcp   2049
100227    3   tcp   2049
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100227    2   udp   2049
100227    3   udp   2049
100021    1   udp  38666  nlockmgr
100021    3   udp  38666  nlockmgr
100021    4   udp  38666  nlockmgr
100021    1   tcp  44067  nlockmgr
100021    3   tcp  44067  nlockmgr
100021    4   tcp  44067  nlockmgr
100005    1   udp  51123  mountd
100005    1   tcp  57740  mountd
100005    2   udp  39024  mountd
100005    2   tcp  53219  mountd
100005    3   udp  40590  mountd
100005    3   tcp  47949  mountd
t4525%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 632) = -1 ECONNRESET (Connection reset by peer) close(12) = 0
tz2%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 632) = 632 poll([{fd=5, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=6, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=7, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=8, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=9, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=10, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=11, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=12, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 8, 30000) = 1 ([{fd=12, revents=POLLIN|POLLRDNORM}]) read(12, "", 4) = 0 close(12) = 0

... então ele abre uma enquete para esperar por outra conexão. Quando faço isso no meu servidor de backup:

%pre%

Suponho que possa ser um problema de firewall, mas o VyOS não tem nenhum firewall, nem o servidor de backup; outros dispositivos na mesma sub-rede que o servidor de backup podem rpcinfo -p backup muito bem, e nenhum deles pode rpcinfo meu pi. Estranhamente: servidores na rede 10.47.7 podem servidores rpcinfo na rede 10.47.6 diferente do pi . Mas o pi permite conexão em qualquer protocolo e qualquer porta de qualquer coisa que ele veja em 10.47.6.0/23 (aka, ambas as sub-redes), e o strace em rpcbind indica que faz a conexão de entrada. A única coisa que posso pensar é que ele está bloqueando suas próprias conexões de saída para 10.47.7.0/24, mas não tenho regras de saída de qualquer tipo e uma política ACCEPT padrão, e quando corri a tabela inteira para um teste rápido eu ainda tem falhas. o que esta acontecendo aqui? O pi está escutando em todas as portas usuais:

%pre%

Argh !!!

    
por matthearn 04.01.2017 / 02:27

0 respostas