我有一个配置为侦听 UDP 端口的 OpenVPN 服务器。最近我注意到我无法通过 SSH 访问网络中的某些主机。以下是我的设置:
- tun0- 服务器上的 openvpn 隧道
- enp2s0- 连接到 Verizon 路由器的以太网适配器
- 连接到同一 Verizon 路由器的其他服务器
tun0 的 IP 地址是10.9.0.1
我的 IPTABLES 非常简单:
# Generated by iptables-save v1.6.0 on Sat Oct 22 01:16:10 2016
*filter
:INPUT ACCEPT [61507:19615383]
:FORWARD ACCEPT [13925:2889584]
:OUTPUT ACCEPT [58841:13675304]
-A FORWARD -i enp2s0 -o tun0 -j ACCEPT
COMMIT
# Completed on Sat Oct 22 01:16:10 2016
# Generated by iptables-save v1.6.0 on Sat Oct 22 01:16:10 2016
*nat
:PREROUTING ACCEPT [222:18139]
:INPUT ACCEPT [43:2580]
:OUTPUT ACCEPT [153:10471]
:POSTROUTING ACCEPT [238:15571]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Sat Oct 22 01:16:10 2016
我无法访问的服务器之一连接到有 IP 地址192.168.1.157
通过 VPN 连接的客户端主机的 IP 地址是10.9.0.100
我可以 ping192.168.1.157从10.9.0.100。我可以 ping10.9.0.100从192.168.1.157
我nc -l -s 192.168.1.157 -p 2222
开始192.168.1.157并尝试连接到端口2222从10.9.0.100- 成功了,我可以在10.9.0.100并看到它出现在其他终端上 - 然后read(net): Connection reset by peer
打印在192.168.1.157并且 netcat 终止。如果我连接到 netcat 并尝试在上面输入一些内容192.168.1.157- 然后控制台上什么也没有出现10.9.0.100我得到了read(net): Connection reset by peer
这个192.168.1.157
我可以通过 telnet 连接到端口22在192.168.1.157从10.9.0.100但我看不到 SSH 服务器的标准提示。
但是,如果我尝试使用 SSH 客户端连接到服务器,我可以在服务器的日志中看到
Oct 22 01:26:56 http-1-1 sshd[626]: debug1: Forked child 995.
Oct 22 01:26:56 http-1-1 sshd[995]: debug1: Set /proc/self/oom_score_adj to 0
Oct 22 01:26:56 http-1-1 sshd[995]: debug1: rexec start in 5 out 5 newsock 5 pipe 7 sock 8
Oct 22 01:26:56 http-1-1 sshd[995]: debug1: inetd sockets after dupping: 3, 3
Oct 22 01:26:56 http-1-1 sshd[995]: debug1: getpeername failed: Transport endpoint is not connected
Oct 22 01:26:56 http-1-1 sshd[995]: debug1: ssh_remote_port failed
如果我这样tcpdump -i eth0 port 22 and src host 10.9.0.100
做192.168.1.157并尝试通过 ssh 连接10.9.0.100我在 /var/log/auth.log 中看到此信息
01:39:45.486123 IP 10.9.0.100.53546 > http-1-1.fios-router.home.ssh: Flags [S], seq 1176047909, win 29200, options [mss 1368,sackOK,TS val 8701042 ecr 0,nop,wscale 7], length 0
01:39:45.562909 IP 10.9.0.100.53546 > http-1-1.fios-router.home.ssh: Flags [.], ack 324252195, win 229, options [nop,nop,TS val 8701066 ecr 286207], length 0
01:39:45.567772 IP 10.9.0.100.53546 > http-1-1.fios-router.home.ssh: Flags [P.], seq 0:21, ack 1, win 229, options [nop,nop,TS val 8701066 ecr 286207], length 21
01:39:45.641442 IP 10.9.0.100.53546 > http-1-1.fios-router.home.ssh: Flags [R], seq 1176047931, win 0, length 0
01:39:45.839893 IP 10.9.0.100.53546 > http-1-1.fios-router.home.ssh: Flags [P.], seq 0:21, ack 1, win 229, options [nop,nop,TS val 8701150 ecr 286207], length 21
我在这里错过了什么?我猜想肯定存在一些数据包过滤,但不确定是我搞砸了我的 iptables,还是 Verizon FiOS 路由器在处理这些数据包时搞砸了一些数据包。我不知道那个 RST 数据包到底来自哪里。
请指教。
答案1
尝试在 POSTROUTING 链规则中替换tun0
为。FORWARD 链中的规则似乎没有必要。enp2s0