仅允许传入流量到特定的公共 IP

仅允许传入流量到特定的公共 IP

我有一个 Debian VPS,它有 2 个公共 IP 地址,90.90.90.90 和 90.90.90.100。

我想要做的是让服务器只接受到其他公共 IP 的传入流量。

例子:

我在服务器上运行了一个 OpenVPN 服务器。当我与 90.90.90.90 建立 VPN 连接时,公网 IP 将是 90.90.90.100。(这是目前的情况)

我不希望 OpenVPN 端口对 90.90.90.100 开放,只对连接服务器时使用的其他 IP 开放。

使用 iptables 或其他方法可以实现吗?

谢谢!

答案1

如果我理解您的意思,那么就是您希望与 IP #1 建立的 VPN 连接将其传出连接伪装成 IP #2,而与 IP #2 建立的 VPN 连接将其传出连接伪装成 IP #1。

为了回答这个问题,我们将 90.90.90.90 称为 IP #1,将 90.90.90.100 称为 IP #2

最简单的方法是运行 2 个 openvpn 服务器。为每个服务器设置不同的私有子网范围,例如,IP #1 上的传入连接将接收 10.0.1.0/24 范围内的地址,而 IP #2 上的传入连接将接收 10.0.2.0/24 范围内的地址。

配置文件大部分与原始配置相同,除了三行之外,第一个配置将包含以下内容:

local 90.90.90.90
server 10.0.1.0 255.255.255.0
push "route 10.0.1.0 255.255.255.0"

而第二个将会是这样的:

local 90.90.90.100
server 10.0.2.0 255.255.255.0
push "route 10.0.2.0 255.255.255.0"

重新启动 openvpn 服务以确保两个配置文件都已激活。

然后,为了确保连接在离开 VPN 服务器时获得正确的外部 IP 地址,您可以使用以下 iptables 规则。将 eth0 替换为实际接口名称。

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j SNAT --to 90.90.90.100
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j SNAT --to 90.90.90.90

现在,VPN 连接从一个 IP 进入,然后假装是另一个 IP。这可能比需要的更复杂,特别是没有理由运行vpn 服务器,在这种情况下,只需删除其中一个配置并专门使用剩余的配置。

相关内容