我有一个 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 服务器,在这种情况下,只需删除其中一个配置并专门使用剩余的配置。