Я установил сервер OpenVPN на машине с частным IP-адресом 10.0.0.13. Шлюз имеет адрес 10.0.0.2 и раздает адреса 10.0.0. * Другим машинам в сети. VPN настроен с использованием моста. Мой файл / etc / network / interfaces выглядит так:
# Bring these interfaces up automatically
auto lo br0
# The loopback network interface
iface lo inet loopback
# The bridge connection
iface br0 inet static
address 10.0.0.13
bridge_ports eth0
bridge_stp on
broadcast 10.0.0.255
gateway 10.0.0.2
netmask 255.255.255.0
network 10.0.0.0
# The primary network interface
iface eth0 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
down ip link set $IFACE promisc off
down ifconfig $IFACE down
Файл конфигурации сервера (/etc/openvpn/server.conf) выглядит так:
port 1194
proto udp
dev tap0
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"
ca ca.crt
cert VPNserver.crt
key VPNserver.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
server-bridge 10.0.0.13 255.255.255.0 10.0.0.200 10.0.0.219
push "route 10.0.0.2 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
max-clients 20
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
crl-verify crl.pem
Я думаю, что серверный мост и строка под ним, возможно, нуждаются в настройке. Должен ли OpenVPN создавать подсеть для себя и для подключения клиентов? Сначала у меня создалось впечатление, что я могу просто заставить OpenVPN назначать IP-адреса в той же подсети, если они находятся за пределами диапазона DHCP маршрутизатора; сейчас я не так уверен.
В любом случае, вот симптомы текущего конфига. Клиентский компьютер (который находится в сети 10.6.0.0 - вы увидите это в следующих результатах) может подключиться, но только IP-адрес сервера OpenVPN доступен для проверки связи, и я не могу просматривать веб-страницы. Я подключаюсь из Linux CLI; вот некоторые из полученных результатов, которые заставляют меня думать, что проблема заключается в маршрутизации. Я выделил вывод, который мне кажется актуальным.
Fri Jun 3 12:54:51 2011 [VPNserver] Peer Connection Initiated with [AF_INET]SERVER.PUBLIC.IP.ADDRESS:1194
Fri Jun 3 12:54:53 2011 SENT CONTROL [VPNserver]: 'PUSH_REQUEST' (status=1)
Fri Jun 3 12:54:53 2011 PUSH: Received control message: 'PUSH_REPLY,route 10.0.0.2 255.255.255.0,redirect-gateway def1 bypass-dhcp,route-gateway 10.0.0.13,ping 10,ping-restart 120,ifconfig 10.0.0.201 255.255.255.0'
Fri Jun 3 12:54:53 2011 OPTIONS IMPORT: timers and/or timeouts modified
Fri Jun 3 12:54:53 2011 OPTIONS IMPORT: --ifconfig/up options modified
Fri Jun 3 12:54:53 2011 OPTIONS IMPORT: route options modified
Fri Jun 3 12:54:53 2011 OPTIONS IMPORT: route-related options modified
Fri Jun 3 12:54:53 2011 ROUTE default_gateway=10.6.0.1
Fri Jun 3 12:54:53 2011 TUN/TAP device tap0 opened
Fri Jun 3 12:54:53 2011 TUN/TAP TX queue length set to 100
Fri Jun 3 12:54:53 2011 /sbin/ifconfig tap0 10.0.0.201 netmask 255.255.255.0 mtu 1500 broadcast 10.0.0.255
Fri Jun 3 12:54:53 2011 /sbin/route add -net SERVER.PUBLIC.IP.ADDRESS netmask 255.255.255.255 gw 10.6.0.1
**SIOCADDRT: File exists
Fri Jun 3 12:54:53 2011 ERROR: Linux route add command failed: external program exited with error status: 7**
Fri Jun 3 12:54:53 2011 /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.0.0.13
Fri Jun 3 12:54:53 2011 /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.0.0.13
**Fri Jun 3 12:54:53 2011 /sbin/route add -net 10.0.0.2 netmask 255.255.255.0 gw 10.0.0.13
route: netmask doesn't match route address**
Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.
route {-h|--help} [<AF>] Detailed usage syntax for specified AF.
route {-V|--version} Display version/author and exit.
-v, --verbose be verbose
-n, --numeric don't resolve names
-e, --extend display other/more information
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
<AF>=Use '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
**Fri Jun 3 12:54:53 2011 ERROR: Linux route add command failed: external program exited with error status: 4**
Fri Jun 3 12:54:53 2011 GID set to nogroup
Fri Jun 3 12:54:53 2011 UID set to nobody
Fri Jun 3 12:54:53 2011 Initialization Sequence Completed
Итак, я думаю, я ищу:
Если вы используете мост, то вам, вероятно, не следует продвигать какие-либо маршруты.
Хорошо, технически @Zoredache верен. Мой вопрос был: «Каковы правильные маршруты для подключения сервера OpenVPN с мостовым подключением?» и я не должен давить route 10.0.0.2 255.255.255.0
(что, вероятно, должно быть route 10.0.0.0 255.255.255.0
тем не мение). Удаление этой строки решило первую часть моей проблемы.
Вторая часть моей проблемы (невозможность пинговать другие машины в сети 10.0.0.0) была связана с деталью, о которой я не упомянул, а именно с тем, что этот сервер находится на виртуальной машине VMWare. Благодаря это сообщение в блоге, Я обнаружил, что «виртуальный коммутатор ESXi по умолчанию отбрасывает беспорядочные пакеты», и узнал, как настроить виртуальную машину, чтобы этого не делать.
Мне не удалось достичь третьей цели - маршрутизации всего трафика через VPN, но я решил, что это не критично для данного конкретного развертывания. Комментарии в конфигурации по умолчанию предполагают, что, раскомментировав push "redirect-gateway def1 bypass-dhcp"
Я бы «настроил всех клиентов для перенаправления их сетевого шлюза по умолчанию через VPN, заставляя весь IP-трафик, такой как просмотр веб-страниц и поиск DNS, проходить через VPN», но когда я раскомментировал это, я не смог выйти за пределы сети на все.
При использовании маршрутизируемого openvpn интерфейс подразумевается. Однако при использовании мостового openvpn вы больше не можете предполагать, что что-то подразумевается. Должна быть возможность сообщить, через какой IP-адрес проходит маршрут. Как (командная строка linux): ip ro add 8.0.0.0/8 через 1.2.3.4.