为两个 openvpn 实例(一个 TCP 和一个 UDP)共享一个 IP 池

为两个 openvpn 实例(一个 TCP 和一个 UDP)共享一个 IP 池

我目前在我的 VPS 上运行 OpenVPN,通过 TCP 监听端口 1194。我需要使用 TCP,因为有时我需要通过 HTTP 代理隧道传输流量。但是,我也希望能够使用 UDP,它应该更快。但是,我不想创建两个子网,因为我的机器也相互连接,我想将它们全部放在一个子网上。

有没有办法让两个实例共享一个 IP 池?

这是我的服务器配置,供参考:

dev tun
proto tcp
persist-key
persist-tun
log-append /var/log/openvpn
comp-lzo

port 1194
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
ifconfig-pool-persist ipp.txt
server 192.168.192.0 255.255.255.0
topology subnet
client-to-client
push "dhcp-option DNS 192.168.192.1"
push "dhcp-option DOMAIN my.example.com"

# Daemon settings
user nobody
group nogroup

答案1

好的,我解决了这个问题。

首先,我切换到桥接网络。我创建了一个桥接设备和两个连接的 Tap 设备(桥接器上没有以太网设备)。UDP 服务器监听 192.168.192.1 [和 tap0],TCP 监听 192.168.192.2 [和 tap1]。桥接器本身获取 192.168.192.1,但我认为这并不重要。两者都有相同的 ifconfig-pool-persist 文件。

这有效,但我无法从通过 UDP 连接的客户端连接到通过 TCP 连接的客户端,反之亦然(使用相同方法的客户端可以相互通信)。我添加了一条防火墙规则:

iptables -A FORWARD -i br0 -o br0 -j ACCEPT

现在一切正常。

答案2

您放入 VPN 的流量与隧道使用的协议无关。在 OpenVPN 隧道中,您可以放入据我所知的任何流量(TCP、UDP、ICMP 等)。

编辑 :我真的不认为你可以拥有两个具有相同子网的 OpenVPN 实例,因为这会给你一个不可能的路由表。你可以做的是必须分离子网或在它们之间路由。我从来没有这样做过,但我认为有理由认为它会起作用。

相关内容