对于以下中篇小说,我提前致歉。
我有一个 USB 驱动器连接到运行 Raspbian 的 Raspberry Pi;遗憾的是,crashplan 不再适用于 Raspbian,所以我无法将其备份到我的 Crashplan 服务器(创造性地命名为“备份”)。我尝试做的是 NFS 将文件系统共享到我的 Crashplan 服务器,并让它将其 rsync 到本地文件系统,但我无法将其安装在备份服务器上。
“备份”是在 ESXi 上运行的 CentOS 6 VM,与 Pi 位于不同的子网中;我使用 VyOS 作为路由器。到目前为止,它总体上运行良好,但我怀疑 VyOS 的某些方面可能会搞砸工作。VyOS 设置为在我的 10.47.6.0/24(pi 所在的位置)和 10.47.7.0/24(我的大多数 VM 所在的位置)之间路由。当我从 pi(或从同一子网中的另一台服务器)执行 rpcinfo 时,它会成功;当我从另一个子网执行时,我得到:
rpcinfo: can't contact portmapper: RPC: Unable to receive; errno = Connection reset by peer
它也可以用于 VyOS VM。
pi 是进入我网络的通道(我的 Verizon 路由器将某些端口转发给它以供外部访问),因此 iptables 配置为阻止大多数东西。但是,它对我的两个子网中的所有端口都开放:
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
VyOS 本身在两个子网之间根本没有配置防火墙:
vyos@vyos:~$ show firewall
-----------------------------
Rulesets Information
-----------------------------
vyos@vyos:~$
它具有最基本的路由配置:
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>
我可以 ping 遍所有地方,可以 ssh,可以访问在 10.47.7.0/24 VLAN 上的各种端口上运行的 Web 和其他服务,所以我认为我没有防火墙问题。更重要的是,当我将 strace 连接到 pi 上的 rpcbind 守护程序时,它看到连接进来然后由于某种原因将其转储,我没有足够的智慧来从跟踪数据中进行转换。这已经是 5 倍长了,所以我就不给你完整的 strace 输出了,因为它在某个点之前是相同的。
当我从 VyOS 成功连接时,pi 显示:
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
...然后它打开一个轮询来等待另一个连接。当我从我的备份服务器执行此操作时:
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
我认为这可能是防火墙问题,但 VyOS 根本没有防火墙,备份服务器也没有;与备份服务器位于同一子网中的其他设备可以正常执行 rpcinfo -p 备份,但它们都无法执行 rpcinfo 我的 pi。奇怪的是:10.47.7 网络中的服务器可以执行 rpcinfo 10.47.6 网络中的服务器除了 pi但是 pi 允许在 10.47.6.0/23(即两个子网)中看到的任何协议和任何端口上进行连接,并且 rpcbind 上的 strace 表明它做查看传入连接。我唯一能想到的是它阻止了自己到 10.47.7.0/24 的出站连接,但我没有任何类型的出站规则和默认的 ACCEPT 策略,当我刷新整个表进行快速测试时,仍然失败了。这到底是怎么回事?pi 正在监听所有常用端口:
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
啊!!!