openvpn 高级设置 - 伪装、snat/dnat 甚至代理

openvpn 高级设置 - 伪装、snat/dnat 甚至代理

因此,我有以下问题:给定一个具有公共(可路由)ip 的服务器,假设:xyz1、xyz2、xyz3 - xyz31,我想将 OpenVPN 配置为某些客户端的代理或伪装服务器,如下所示:每个客户端都有一个唯一的公共静态 ip 地址:abcd 他将连接到允许的服务器地址:xyz1(他不能连接到服务器的任何其他公共 ip 地址)。使用此连接,他应该能够使用他首先连接到的公共 ip 地址(假设为 xyz1)浏览互联网。仅使用 Squid(为需要它的人附加)即可轻松完成此设置,但我必须找到一种方法来使用 OpenVPN 完成整个过程。

acl testuser1src src abcd #这是客户端的公网ip地址

acl testuser1bindip myip xyz1 # 服务器的某个公网 IP 地址

tcp_outgoing_address xyz1 testuser1bindip

http_access allow testuser1src testuser1bindip #如果两个条件都满足就OK

提前致谢

答案1

其中“1.1.1.1”是客户端的 OpenVPN 分配地址,“9.9.9.9”是用于对客户端流量进行 SNAT 的公共 IP 地址:

iptables -t nat -A POSTROUTING -s 1.1.1.1 -j SNAT --to-source 9.9.9.9

这就是在我这里的测试箱上你想要的。显然,你需要使用客户端配置文件设置 OpenVPN,以便在客户端连接时向给定客户端分配相同的 IP 地址,但听起来你已经做到了。

如果您的 FORWARD 链中还没有允许来自客户端的流量通过的条目,那么您也需要在那里添加一条规则。如果您想盲目转发在隧道接口上收到的发往 Internet 的流量,您可以执行如下操作:

iptables -A FORWARD -i tun+ -o internet-interface -j ACCEPT

最后,如果您想要将针对客户端公共 IP 地址的未经请求的入站连接尝试定向到客户端,您需要在 nat 表中的 PREROUTING 链上使用以下命令执行此操作:

iptables -t nat -I PREROUTING -d 9.9.9.9 -j DNAT --to-dest 1.1.1.1

答案2

您可以在 openvpn 服务器上使用 ipp.txt 文件,这样它只会为每个客户端分配您想要的 IP。默认情况下,ipp.txt 由 openvpn 服务器维护,但您可以更改这一点,以便使用服务器配置文件中的以下行来维护它(openvpn 将不再更新 ipp.txt):

ifconfig-pool-persist /path/to/ipp.txt 0在服务器配置上(只需在默认行末尾添加 0)。

该文件的格式为host,ip

答案3

感谢 Evan 的快速回复。但是,SNAT 和 DNAT 不是这里的问题。让我举一个真实的例子来向您展示我到底想要什么:

我们有两个客户端,每个客户端都有一个唯一的公共 IP:客户端 1:219.16.233.140 和客户端 2:143.12.155.19。服务器的 IP 地址为:213.230.161.1 - 213.230.161.31。首先,我想为每个客户端分配一个(且只有一个!!!)来自我的服务器的公共 IP 地址,他们将使用该 IP 地址在互联网上隐藏自己。

客户端1(219.16.233.140) ---> 213.230.161.10 客户端2(143.12.155.19) ---> 213.230.161.11

我们以尽可能少的配置设置 OpenVPN:所有客户端之间共享的静态密钥:

服务器配置文件 dev tun server 10.8.0.0 255.255.255.0 secret static.key 客户端1配置文件 remote 213.230.161.10 dev tun ifconfig 10.8.0.2 10.8.0.1 secret static.key 客户端2配置文件 remote 213.230.161.11 dev tun ifconfig 10.8.0.3 10.8.0.1 secret static.key

当然,我可以限制 Client1 仅连接到 213.230.161.10,限制 Client2 仅连接到 213.230.161.11,但如何防止它们切换隧道 IP?我的意思是,client1 可以轻松修改 .ovpn 文件,使其显示:ifconfig 10.8.0.3 10.8.0.1,从而干扰 client2。这将使 SNAT-DNAT 规则失效。这就是我的困境,如何将客户端的公共 IP 链接到服务器端看到的隧道 IP(对于 219.16.233.140,只有 10.8.0.2 地址可以在 ovpn tun 接口上内部使用,而 219.16.233.140 只能连接到 213.230.161.10)。

谢谢,RC

相关内容