一旦打开 OpenVPN 连接,如何本地访问(即 ssh)我的家庭服务器?

一旦打开 OpenVPN 连接,如何本地访问(即 ssh)我的家庭服务器?

我在家里设置了一台 Raspberry Pi(运行 Raspbian)作为媒体服务器,我可以通过 SSH 和其他端口从网络外部访问它(即通过端口 32400 从移动设备使用 Plex 客户端)。最近,我决定订阅一项商业 VPN 服务。我在 Raspbian 上安装并配置了 OpenVPN。

经过长时间的搜索、阅读和测试,我发现了如何在服务器将所有流量从 eth0 重定向到 tun0 时远程 ssh 进入我的服务器。只需运行:

ip rule add from <internal IP of SSH server/VPN client> table 10
ip route add default via <internal IP of gateway/router> table 10

我在 /etc/init.d/ 中添加了几个脚本,用于在启动时打开 VPN 连接,并在 VPN 连接建立后运行上述两个命令(似乎这些规则在重新启动时会重置)。因此,使用上述设置,我可以从工作地点通过 ssh 访问我的服务器,没有任何问题。

我的问题是,在上述环境中,我无法本地 ssh 进入 Raspberry Pi。因此,PlayStation 4 上的 Plex 客户端无法再找到服务器...但是,如果我删除 rc.d 脚本(1/打开 VPN 连接和 2/执行上述两个命令行),我可以从家里和外面连接到服务器 - 但没有运行 VPN :)

我认为我在 ip 路由方面做错了什么,但似乎无法弄清楚是什么。或者可能是因为脚本运行的顺序不正确(尽管 ip 路由命令“Required-Start”vpnconnection 需要建立)

希望这一切都有意义,并且您可以为我指明正确的方向,让我能够从本地和远程网络 ssh 到 pi。我相信答案在于使用路由或推送,但我不确定。

以下是一些可能有用的输出。

在此先感谢您的帮助!

tun0 创建时 route -n 的输出

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.109.1.5      128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
10.109.1.1      10.109.1.5      255.255.255.255 UGH   0      0        0 tun0
10.109.1.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
128.0.0.0       10.109.1.5      128.0.0.0       UG    0      0        0 tun0
168.1.6.49      192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

iptables -L -v 的输出

Chain INPUT (policy DROP 44 packets, 5890 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22
  220  143K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID
 7062 1750K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:32400
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5850
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:4285
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:58846
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8112
    1    64 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:72
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
   92 15173 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8071 packets, 1231K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

OpenVPN 客户端配置文件

client
dev tun
proto udp
remote [xxx.yyy.com] [PORT]
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
auth-user-pass

sysctl -a | grep \.rp_filter 的输出

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tun0.rp_filter = 0

ip route show 的输出

0:   from all lookup local
32765:   from 192.168.0.170 lookup 10
32766:   from all lookup main
32767:   from all lookup default

ip route show table 10 的输出

default via 192.168.0.1 dev eth0

答案1

通过将一台机器连接到 VPN 网络,您可以有效地将其与本地 LAN“隔离”,它将看不到 VPN 网络中的任何其他机器。

所以我认为你的 VPN 设置错了——你想运行 VPN客户在你的偏僻的机器和 VPN服务器在你的当地的LAN - 使本地 LAN 不受影响,并使远程机器感觉与本地 LAN 已连接。

相关内容