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


10

我正在使用匿名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

Answers:


15

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

有几种方法可以解决此问题,但是我将与您分享在相同情况下为我工作的一种方法。这是我们需要做的:

  1. 创建一个新的IP规则表以处理非VPN流量
  2. 添加IP规则以查找我们的no-VPN表中是否有标有特定netfilter掩码的所有数据包
  3. 在我们的no-VPN表中添加一个IP路由,该路由将所有流量定向为使用您的以太网接口而不是隧道
  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

为您的新规则表选择任意数字和名称-上面未使用的任何内容。novpn在此答案的其余部分中,我将使用数字201和名称。

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

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

添加新的IP规则以查找no-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除外)-下次重新启动计算机时,它们将被清除。使它们永久化是我留给您的一项练习。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.