为不同的客户端使用不同的网络接口配置OpenVPN

为不同的客户端使用不同的网络接口配置OpenVPN

我想为 openvpn 的每个客户端设置不同的传出 IP。我有两个 IP,每个 IP 有两个不同的网络接口:ens3 和 ens3:1(我有更多客户端,这只是为了尝试)。它们在 /etc/network/interfaces 中定义如下:

auto lo
iface lo inet loopback

auto ens3
iface ens3 inet static
        address `default_ip`
        netmask 255.255.254.0
        gateway `gateway`
        dns-nameservers 108.61.10.10
        post-up ip route add 169.254.0.0/16 dev ens3


auto ens3:1
iface ens3:1 inet static
        address `ip2`
        netmask 255.255.254.0

我创建了密钥,安装了 openvpn 并配置了网络。

net.ipv4.ip_forward=1在、中进行了配置sysctl.conf,并使用 来配置 iptable 。DEFAULT_FORWARD_POLICY="ACCEPT"/etc/default/ufwiptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE

我配置了 openvpn,如下所示(/etc/openvpn/server.conf),查看这里

mode server
tls-server
proto tcp-server
port 443
dev tun
topology "subnet"
push "topology subnet"
ifconfig 10.8.0.1 255.255.254.0
push "route-gateway 10.8.0.1"
push "redirect-gateway def1"
ifconfig-pool 10.8.0.2 10.8.255.255 255.255.0.0
client-config-dir ccd
log-append openvpn.log
status openvpn-status.log
keepalive 10 60
# TLS needs:
pkcs12 keys/server.p12
dh keys/dh2048.pem

Openvpn 到目前为止都可以正常工作。当我在 macOs 中使用 Tunnelblick 使用此 client1.opvn(下面)文件和 client1.psk 登录时,它可以正常工作。我可以使用 default_ip 上网。

client
dev tun
ns-cert-type server
proto tcp
remote `default_ip` 443
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
verb 3
pkcs12 /Users/User/client1.p12

但是,当我尝试ip2通过创建如下所示的 ccd/client1 文件并使用 配置 iptable 来在使用 openvpn 时使用client1 时iptables -t nat -A POSTROUTING -s 10.8.5.0 -o ens3:1 -j MASQUERADE,它不起作用。Tunnelblick 已连接到 OpenVPN,但没有互联网连接。

ifconfig-push 10.8.5.1 255.255.254.0

顺便说一句,openvpn 安装在 Ubuntu 16.04 上。我应该说,我是网络新手,也是 openvpn 新手。我尝试了几种方法,但不管怎样都行不通。我该如何让它工作?

答案1

我无法让它以这种方式工作。这就是为什么我配置了多个 openvpn 实例,以便每个实例都监听单个 ip 并使用相同 ip 的接口。

我用过这个bash 脚本进行初始安装。

我在 /etc/openvpninstances 下为每个实例创建了一个目录。您可以复制默认目录以快速启动。

对于每个 IP,都应该定义网络接口并配置 iptables。

# $i should be different for each ip, we use 10.9.$i.0 in server.conf
iptables -t nat -A POSTROUTING -s 10.9.$i.0/24 -j SNAT --to $ip

以下是每个 IP 的 server.conf:

port 1194
local $ip1
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca /etc/openvpninstances/ovpn-$ip1/ca.crt
cert /etc/openvpninstances/ovpn-$ip1/server.crt
key /etc/openvpninstances/ovpn-$ip1/server.key
dh /etc/openvpninstances/ovpn-$ip1/dh.pem
tls-auth /etc/openvpninstances/ovpn-$ip1/ta.key 0
topology subnet
server 10.9.$.0 255.255.255.0
ifconfig-pool-persist /etc/openvpninstances/ovpn-$ip1/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS $DNSIP"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /etc/openvpninstances/ovpn-ip1/openvpn-status.log
verb 3
crl-verify /etc/openvpninstances/ovpn-ip1/crl.pem
daemon ovpn-$ip1

每个 openvpn 实例可以通过以下命令启动:

/usr/sbin/openvpn /etc/openvpninstances/ovpn-$ip/server.conf

在 ovpn 文件中,每个 ip 的远程 ip 和端口以及证书都应该更改。

相关内容