我有一个 VPS,它有以下公共 IP 地址:
xx.xx.xx.192 (This IP-address is assigned to eth0)
xx.xx.xx.193
xx.xx.xx.194
xx.xx.xx.195
xx.xx.xx.196
xx.xx.xx.197
xx.xx.xx.198
xx.xx.xx.200
xx.xx.xx.201
xx.xx.xx.202
eth0 配置了静态 IP。网关为 xx.xx.xx.254,网络掩码为 255.255.255.0 ipv4_forward 为 1。我还没有 iptables 规则。此服务器不位于受 NAT 限制的网络后面。(我不需要在任何地方为服务打开端口,只需设置服务并通过端口连接到服务器即可。)
我想让 OpenVPN 服务器将所有公共 IP 分配给客户端,当然,.192 除外。
但是当我连接到 OpenVPN 服务器时,我没有获得 IP 地址。Windows 只是将 IP 地址设置为 169.xx.xx.xx 地址(仅限本地)
我尝试让 TAP 适配器具有静态 IP 地址,xx.xx.xx.194,xx.xx.xx.192 作为网关,255.255.255.0 作为网络掩码。现在我无法使用此 IP 连接任何东西。我的计算机首先尝试使用 TAP 适配器到达目的地,然后它放弃并使用我的默认网络连接。(WLAN)
这是 OpenVPN 服务器的配置,我是否遗漏了什么?
mode server
dev tap
port 1197
proto udp
local xx.xx.xx.192
tls-server
dh /etc/openvpn/ssl/dh1024.pem
cert /etc/openvpn/ssl/server.crt
key /etc/openvpn/ssl/server.key
ca /etc/openvpn/ssl/ca.crt
reneg-sec 216000
ifconfig xx.xx.xx.193 255.255.255.0
push "route xx.xx.xx.194 255.255.255.0 net_gateway"
push "route-gateway xx.xx.xx.192"
push "redirect-gateway def1"
push "dhcp-option DNS 195.159.0.100"
push "dhcp-option DNS 195.159.0.200"
keepalive 5 60
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
log /var/log/openvpn/main204.log
verb 1
mute 10
username-as-common-name
tun-mtu 1500
tun-mtu-extra 32
max-clients 30
auth-user-pass-verify "/etc/openvpn/script/login.sh" via-env
script-security 3
tmp-dir "/tmp"
tcp-queue-limit 128
txqueuelen 200
tcp-nodelay
inactive 600
client-connect /etc/openvpn/script/connect.sh
client-disconnect /etc/openvpn/script/disconnect.sh
cipher aes-128-cbc
我正在使用 MySQL 身份验证,因此这是 login.sh 脚本:
//!/bin/bash
. /etc/openvpn/script/config.sh
//Authentication
user_id=$(mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -sN -e "select user_id from ovpnuser where user_id = '$username' AND user_pass = '$password' AND user_enable=1 AND user_start_date != user_end_d$
//Check user
[ "$user_id" != '' ] && [ "$user_id" = "$username" ] && echo "user : $username" && echo 'authentication ok.' && exit 0 || echo 'authentication failed.'; exit 1
这是 connect.sh 脚本:
//!/bin/bash
. /etc/openvpn/script/config.sh
//insert data connection to table log
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "INSERT INTO ovpnlog (log_id,user_id,log_trusted_ip,log_trusted_port,log_remote_ip,log_remote_port,log_start_time,log_end_time,log_received,log_send) V$
//set status online to user connected
mysql -h$HOST -P$PORT -u$USER -p$PASS $DB -e "UPDATE ovpnuser SET user_online=1 WHERE user_id='$common_name'"
答案1
您正在使用tap
-style 接口。默认情况下,OpenVPN 本身不会为其分配地址,但会将其桥接到当前网络,然后通过此网络中用于地址分配的方法分配地址。
显然,您尚未设置桥接部分,因此,如果您想继续进行样式tap
设置,请查看OpenVPN 文档中的桥接部分看看这可能是什么样的例子。
但请记住,与设置相比,带有桥接的 TAP 会产生来自客户端广播流量的更多开销和噪音,并且更难过滤、塑造和排除故障tun
。
因此,我建议使用tun
样式接口与代理 ARP 结合使用(如果你真的需要分配到客户端的公共地址)或地址转换(如果足以将到这些地址的流量转发到客户端)。请参阅“分发公共 IP”部分OpenVPN 2 指南有关如何使用代理 ARP 实现这一点的简单示例 - 它基本上与客户端地址分配以及一对/脚本ifconfig-pool
一起使用,用于管理用于连接客户端的 ARP 条目和主机路由。topology subnet
client-connect
client-disconnect