Nie można zamontować udziału NFS w podsieciach; Polecenia rpcinfo nie działają z klienta na serwer, nawet gdy iptables jest szeroko otwarte

1

Z góry przepraszam za następną nowelę.

Mam napęd USB podłączony do Raspberry Pi z Raspbian; Niestety, crashplan nie działa już z Raspbianem, więc nie mogę wykonać kopii zapasowej na moim serwerze Crashplan (twórczo o nazwie „backup”). Zamiast tego próbuję udostępnić system plików NFS mojemu serwerowi Crashplan i pozwolić mu na zsynchronizowanie go z lokalnym systemem plików, ale nie mogę go zamontować na serwerze kopii zapasowych.

„kopia zapasowa” to maszyna CentOS 6 VM działająca na ESXi i znajdująca się w innej podsieci niż Pi; Używam VyOS jako routera. Jak dotąd, ogólnie działa świetnie, ale podejrzewam, że coś o VyOS może spieprzyć prace. VyOS jest ustawiony na trasę między moim 10.47.6.0/24 (gdzie pi jest) a 10.47.7.0/24 (gdzie większość moich maszyn wirtualnych siedzi). Kiedy robię rpcinfo z pi (lub z innego serwera w tej samej podsieci), to się udaje; kiedy robię to z innej podsieci, otrzymuję:

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

Działa również z VM VM.

Pi jest drogą do mojej sieci (mój router Verizon przesyła do niego pewne porty w celu uzyskania dostępu zewnętrznego), więc iptables jest skonfigurowany do blokowania większości rzeczy. Jest jednak szeroko otwarty dla wszystkich portów w moich dwóch podsieciach:

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

Sam VyOS nie ma skonfigurowanych zapór ogniowych między dwiema podsieciami:

vyos@vyos:~$ show firewall

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

Ma najbardziej podstawową możliwą konfigurację routingu:

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>

Mogę pingować wszędzie, mogę ssh, mogę dostać się do sieci i innych usług działających na sieci VLAN 10.47.7.0/24 na różnych portach, więc nie sądzę, że mam problem z zaporą. Co ważniejsze, gdy podłączę strace do demona rpcbind na moim pi, widzi połączenie a następnie zrzuca go z jakiegoś powodu, że nie jestem wystarczająco inteligentny, aby tłumaczyć z danych śledzenia. To już 5 razy za długo, więc oszczędzę ci pełnego wyjścia strace, ponieważ jest ono identyczne przed pewnym punktem.

Kiedy udało mi się połączyć z VyOS, pi mówi:

write(12, "\200\0\2t\16z\37\322\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"..., 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

... następnie otwiera ankietę, aby czekać na kolejne połączenie. Kiedy robię to z mojego serwera zapasowego:

write(12, "\200\0\2t\314\315\372\355\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"..., 632) = -1 ECONNRESET (Connection reset by peer)
close(12)                               = 0

Przypuszczam, że może to być problem z zaporą, ale VyOS nie ma w ogóle zapory ani serwera zapasowego; inne urządzenia w tej samej podsieci, co serwer zapasowy, mogą tworzyć kopie zapasowe rpcinfo -p, a żaden z nich nie może rpcinfo mojego pi. Co dziwne: serwery w sieci 10.47.7 mogą serwery rpcinfo w sieci 10.47.6 inny niż pi . Ale pi pozwala na połączenie na dowolnym protokole i dowolnym porcie z dowolnego, co widzi w 10.47.6.0/23 (aka, obie podsieci), a strace na rpcbind wskazuje, że robi zobacz połączenie przychodzące. Jedyne, co mogę myśleć, to blokowanie własnych połączeń wychodzących do 10.47.7.0/24, ale nie mam żadnych reguł wychodzących i domyślnej polityki AKCEPTACJI, a kiedy spuściłem całą tabelę na szybki test, nadal mam awarie. Co tu się dzieje? Pi nasłuchuje na wszystkich zwykłych portach:

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

Argh !!!

matthearn
źródło
Proszę użyć iptables -L -vn kiedy wymieniasz konfiguracje iptables, które zawierają interfejsy (możesz zezwolić na 10.47.6.0/23, ale na przykład z niewłaściwego interfejsu). Zwykle umieszcza się RELATED, ESTABLISHED jako pierwszą linię, aby zapobiec dopasowaniu znanych połączeń.
wurtel