匿名化 OpenVPN 允许 SSH 访问内部服务器

匿名化 OpenVPN 允许 SSH 访问内部服务器

我正在使用匿名 VPN,但想要通过 SSH 访问内部计算机。

如何通过 SSH 访问我的内部计算机?ssh 98.123.45.6,连接超时。

  • 有线电视提供商的 IP 地址:98.123.45.6
  • 通过 VPN 的匿名 IP:50.1.2.3
  • 内部计算机:192.168.1.123

在搜索时,我发现有人建议设置 iptables 规则、路由规则,或者将 ListenAddress 添加到 sshd_config。以下哪项适用于我的情况?

这是我的路线

内核 IP 路由表
目标网关 Genmask 标志 指标参考使用 Iface
10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0
10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0
50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 202 0 0 eth0
169.254.0.0 * 255.255.0.0 U 204 0 0 vboxnet0
环回 * 255.0.0.0 U 0 0 0 lo
默认 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
默认 ddwrt 0.0.0.0 UG 202 0 0 eth0

答案1

要解决此问题,您需要设置两个都iptables 和路由规则。您遇到的具体问题是,传出的 SSH 数据包是通过您的匿名 VPN 隧道接口而不是以太网接口路由的。发生这种情况的原因是您的 VPN 软件设置了路由规则,以通过隧道接口发送任何和所有未处理的流量。这对于匿名化您的网络流量很有用;但不利于与您的计算机建立 SSH 连接。

有几种方法可以解决这个问题,但我将与你分享一种在我遇到相同情况时有效的方法。以下是我们需要做的:

  1. 创建新的 IP 规则表来处理非 VPN 流量
  2. 添加 IP 规则以查找我们的无 VPN 表,查找任何标有特定 netfilter 掩码的数据包
  3. 添加一条 IP 路由,引导我们的无 VPN 表中的所有流量使用您的以太网接口而不是隧道
  4. 添加 iptables 规则,使用我们指定的 netfilter 掩码标记所有 SSH 流量

注意:我在执行以下操作时使用了 Raspbian,因此您可能需要稍微调整命令以适合您的发行版。

创建新的 IP 规则表

首先检查 iproute2 的表定义文件。我们要确保不使用任何现有规则表的名称或编号。

cat /etc/iproute2/rt_tables

您可能会看到类似以下内容的内容:

# reserved values
255      local 
254      main
253      default   
0        unspec
#
# local
#
#1      inr.ruhep

为新规则表选择一个任意编号和名称 - 上面未使用的任何名称。我将使用编号 201 和名称novpn作为本答案的其余部分。

将定义直接附加到定义文件或在您选择的文本编辑器中对其进行编辑:

echo "201 novpn" >> /etc/iproute2/rt_tables

添加新的 IP 规则以查找无 VPN 表

检查是否存在处理 netfilter 掩码的现有 IP 规则:

ip rule show | grep fwmark

如果 grep 什么都没找到,那就没问题了。如果它确实打印了一些行,请记下fwmark每行单词右侧的十六进制数。您需要选择一个当前未使用的数字。由于我没有现有的 fwmark 规则,因此我选择了数字 65。

ip rule add fwmark 65 table novpn

这样做的目的是使任何具有 netfilter 掩码 65 的数据包查找我们的新novpn表以获取有关如何路由数据包的指示。

引导新表中的所有流量使用以太网接口

ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn

这里要注意的重要一点是dev eth0。这将强制所有通过novpn表的流量仅使用硬件以太网接口,而不是 VPN 创建的虚拟隧道接口。

现在是刷新 iproute 缓存的好时机,以确保新规则和路线立即生效:

ip route flush cache

指示防火墙规则使用指定的 netfilter 掩码标记所有 SSH 流量

iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65

这里的选项太多了,我无法深入解释。我强烈建议您阅读 iptables 的手册页,以了解这里发生了什么:

man iptables

简而言之:我们将一条输出规则附加到防火墙的 mangle 表(用于专门的数据包处理),指示它使用我们指定的 netfilter 掩码 65 标记来自源端口 22 的任何 TCP 数据包。

接下来是什么?

此时,您应该已准备好测试 SSH。如果一切顺利,您应该会看到令人愉快的“以...身份登录”提示。

为了安全起见,我建议您指示防火墙删除来自隧道接口的任何传入 SSH 请求:

iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP

请注意,上述所有说明都是暂时的(除了创建规则表 ID)——下次重新启动计算机时它们将清除。让它们永久存在是我留给你的练习。

相关内容