У меня есть 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'"
Вы используете tap
-стильный интерфейс. Сам OpenVPN не будет назначать ему адрес по умолчанию, но предназначен для подключения к текущей сети, где адрес будет назначен средствами, используемыми для назначения адреса в этой сети.
По-видимому, вы еще не настроили мостовую часть, поэтому, если вы хотите продолжить tap
-стиль, взгляните на раздел Bridging в документации OpenVPN для примера того, как это может выглядеть.
Однако имейте в виду, что TAP с мостом будет создавать больше накладных расходов и шума от широковещательного трафика клиентов, и его будет труднее фильтровать, формировать и устранять неполадки по сравнению с tun
настроить.
Таким образом, я бы рекомендовал использовать tun
стиль интерфейса в сочетании с Proxy ARP (если вы действительно необходимость публичные адреса, назначенные вашим клиентам) или трансляцию адресов (если этого будет достаточно для пересылки трафика с этих адресов вашим клиентам). Взгляните на раздел «Выдача общедоступных IP-адресов» в разделе Поваренная книга OpenVPN 2 для простого примера того, как это достигается с помощью прокси-ARP - он в основном использует ifconfig-pool
вместе с topology subnet
для присвоения адреса клиента и пары client-connect
/ client-disconnect
сценарии, управляющие записями ARP и маршрутами узлов для подключения клиентов.