Я пытаюсь запустить два клиента openvpn на одном хосте (назовем это двойным клиентом), подключаясь к двум разным серверам openvpn. Мой двойной клиентский ящик работает под управлением Ubuntu 10.04, и в моем файле интерфейсов настроены два псевдонима Ethernet.
Я хочу настроить двойной клиентский ящик так, чтобы компьютер, шлюз которого установлен на eth0: 0, направлял весь свой трафик через один туннель OpenVPN, а компьютер, шлюз которого установлен на eth0: 1, направлял весь свой трафик через другой OpenVPN туннель. В конце концов, я хочу иметь возможность иметь несколько компьютеров, подключающихся к моему двойному клиентскому компьютеру, совместно используя этот туннель OpenVPN (но не подозревая друг о друге).
Выдержка из моего файла / etc / network / interface:
iface eth0:0 inet static
address 192.168.1.242
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.1
iface eth0:1 inet static
address 192.168.1.243
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.1
Я хочу настроить одного клиента для маршрутизации через один псевдоним, а другого клиента для маршрутизации через другой. До сих пор я создал файлы конфигурации клиента и сказал OpenVPN вызывать скрипт вверх и вниз при запуске / остановке.
OpenVPN может запускаться и останавливаться правильно, но у меня возникают проблемы с маршрутизацией, вероятно, из-за моего собственного незнания. У меня есть тестовый блок, который я использую для подключения к моему двойному клиентскому блоку, и я установил шлюз в тестовом блоке на IP-адрес псевдонима Ethernet. Я могу отправлять запросы через двойной клиентский ящик, но мои запросы маршрутизируются странным образом - через главный шлюз на двойном устройстве, а не через туннель OpenVPN.
root@test-box:~# ping yahoo.com
PING yahoo.com (98.137.149.56) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (98.137.149.56): icmp_seq=1 ttl=49 time=413 ms
From 192.168.1.133: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)
Кроме того, мой сервер, похоже, не настраивает устройство tun0 должным образом - согласно файлу журнала OpenVPN, ifconfig вызывается для установки адреса tun0, но когда я запускаю ifconfig для проверки настроек tun0, IP-адрес не назначен. Я проверил журналы, и они не указывают на какие-либо проблемы.
Файл конфигурации клиента выглядит так:
client
dev tun0
proto tcp
remote xxx.xxx.xxx.xxx 1000
resolv-retry infinite
nobind
persist-key
tls-client
tls-remote server
ns-cert-type server
tls-auth ta.key 1
cert acertificate.crt
key akey.key
ca ca.crt
comp-lzo
verb 3
auth-user-pass afile
log-append /var/log/openvpn/openvpn.log
script-security 3 system
up "/etc/openvpn/tun-up-us.sh"
down "/etc/openvpn/tun-down-us.sh"
Мой сценарий вверх выглядит так:
# OpenVPN up script for US
#!/bin/bash
. /usr/local/common/copy-routing-table.sh
# following are the shared variables passed by openvpn
# tun1 1500 1544 10.26.0.2 255.255.255.0 init
# Grab the IP address for the eth0:0 alias
IP_ETH00=$(ifconfig eth0:0 | grep 'inet addr' | sed -e 's/:/ /' | awk '{print $3}')
# Set up routing
copy_routing_table "us_table"
ip route add 10.26.0.0/16 dev eth0:0 src $IP_ETH00 table us_table
ip route add default via $4 table us_table
ip route add 10.26.0.0/16 dev eth0:0 src $IP_ETH00
ip rule add from $IP_ETH00/32 table us_table
ip rule add to $IP_ETH00/32 table us_table
ip route flush cache
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
copy-routing-table.sh копирует записи основной таблицы маршрутизации в us_table. Нежелательно ли копирование основной таблицы маршрутизации в случае конфликта?
Если два сервера OpenVPN настроены правильно для проталкивания необходимых маршрутов клиентам, вам не нужно ничего делать.
Я бы порекомендовал сначала запустить одно из подключений, а затем проверить таблицу маршрутизации, чтобы теперь она содержала маршрут для сети (сетей) за этим сервером. Затем запустите другое соединение и проверьте снова. Если какой-либо из требуемых маршрутов отсутствует, обратитесь к системному администратору сервера OpenVPN. Если это вы, проверьте файл конфигурации сервера на наличие push-команд.
Вам нужно будет более подробно остановиться на том, что вы пытаетесь сделать. Грубый набросок с IP-адресами задействованных хостов и список ваших таблиц маршрутизации во многом поможет понять вашу проблему.
мой сервер, похоже, неправильно настраивает устройство tun0
Возможно, что команда ifconfig завершится ошибкой - возможно, вам следует проверить журналы для этого и опубликовать соответствующие отрывки.
Я хочу настроить двойной клиентский ящик так, чтобы компьютер, шлюз которого установлен на eth0: 0, направлял весь свой трафик через один туннель OpenVPN, а компьютер, шлюз которого установлен на eth0: 1, направлял весь свой трафик через другой OpenVPN туннель
ip rule add from $IP_ETH00 table us_table
Вероятно, это не лучший способ добиться того, чего вы действительно хотите, - кажется, что это разные маршруты для разных клиентов. Пока можно добавить iptables -t mangle
правил для маркировки пакетов по различным критериям, не будет набора критериев, позволяющих различать eth0: 0 и eth0: 1 в качестве входного интерфейса (что связано со способом реализации псевдонима IP).
Что ты жестяная банка do, однако, просто настраивает что-то вроде
ip rule add from <ip-of-your-client-for-the-us-table> table us_table
что полностью устранит необходимость в IP-псевдонимах в вашей конфигурации, поскольку решение о маршрутизации будет приниматься на основе IP-адресов источника и назначения, независимо от того, на какой интерфейс пришел пакет.
copy_routing_table "us_table"
Вы пропустили источник copy_routing_table - если он делает то, что я подозреваю, вы получите всю свою основную таблицу маршрутизации в us_table. Если ваша основная таблица маршрутизации уже содержит маршруты, потенциально противоречащие тому, что вы определяете в сценарии, вы можете в конечном итоге использовать их вместо вновь добавленных маршрутов. Это особенно беспокоит, поскольку вы добавляете новый маршрут по умолчанию в свой up-скрипт:
ip route add default via $4 table us_table
Поскольку у вас уже есть маршрут по умолчанию в вашей «основной» таблице и вы добавляете еще один «через $ 4» (что неверно, кстати, так как $ 4 будет представлять локальный IP-адрес собственного интерфейса tun маршрутизатора - вместо этого вы должны использовать «dev $ 1» ) без удаления старого маршрута. Вы должны добавить ip route del default table us_table
здесь - и, вероятно, что-то подобное и для других маршрутов, которые вы добавляете.
А вот это:
From 192.168.1.133: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)
это сообщение от 192.168.1.133, которое получает пакет для 98.137.149.56 (yahoo.com) и маршрутизирует его через 192.168.1.1. Поскольку 192.168.1.133 знает (по оценке сетевой маски интерфейса), что ваш хост находится в той же сети, что и 192.168.1.1, вы получите уведомление об использовании 192.168.1.1 непосредственно в первую очередь.