Вам необходимо реализовать политику маршрутизации, что означает наличие двух таблиц маршрутизации. Мы не будем трогать main
таблицу маршрутизации, которая уже правильно настроена. Если вы включили пересылку IPv4, она автоматически отправит пакеты из eth1 через ваш OpenVPN.
Во-первых, нам нужно узнать, как ваш OpenVP настраивает таблицу маршрутизации. Для этого в конце запустите клиент OpenVPN из командной строки:
sudo openvpn --config YourConfigFile.conf
(или YourConfigFile.ovpn
, в зависимости от того, что вы используете). Последние строки расскажут вам, как она устанавливает новую таблицу маршрутизации, например, в моем случае это говорит:
Вт июл 14 18:58:07 2015 /sbin /ip route add My.Сервер.Public.IP-адрес /32 через 192.168.105.1
Вт 14 июл 18:58:07 2015 /sbin /ip route add 0.0.0.0/1 через 10.8.73.5
Вт июл 14 18:58:07 2015 /sbin /ip route add 128.0.0.0/1 через 10.8.73.5
Вт 14 июл 18:58:07 2015 /sbin /ip route add 192.168.73.0/24 через 10.8.73.5
Вт 14 июл 18:58:07 2015 /sbin /ip route add 10.8.73.0/24 через 10.8.73.5
Вт июл 14 18:58:07 2015 Завершена последовательность инициализации
Указанные выше маршруты должны быть введены в исполняемый файл, за исключением того, что некоторые из этих номеров являются специфическими для данного конкретного экземпляра VPN. OpenVPN, однако, предоставляет полезные переменные среды, которые будут содержать значения интерфейсов, использованных выше, и которые очень полезны: в данном конкретном случае они
route_net_gateway -> 192.168.105.1
route_vpn_gateway -> 10.8.73.5
Таким образом, строки, которые нужно добавить в файл (назовем его /etc/openvpn/route_up.sh
):
/sbin/ip route add Your.OpenVPN.Server.IPAddress/32 via $route_net_gateway table vpn
/sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
/sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn
/sbin/ip route add Remote.LAN.Net/24 via $route_vpn_gateway table vpn
/sbin/ip route add 172.18.2.0/24 via $route_vpn_gateway table vpn
Не забудьте заменить IP-адрес вашего удаленного сервера и его локальной сети, если вы его используете ; если вы просто используете OpenVPN для получения IP-адреса вашего сервера, тогда вам вообще не нужен следующий за последним оператор. Не забудьте сделать файл исполняемым, chmod 700 route_up.sh
.
Кроме того, вам также нужно будет создать новый файл /etc/openvpn/route_down.sh
, также исполняемый, который разрушает точно такие же маршруты (просто измените add
на del
).
Теперь нам нужно указать вашему OpenVPN избегать реализации маршрутов, потому что мы сделаем это вручную: в вашем YourConfigFile.conf добавьте следующие строки:
route-nopull
up /etc/openvpn/route_up.sh
down /etc/openvpn/route_down.sh
Наконец, нам нужно настроить другую таблицу маршрутизации для VPN. Добавьте новую таблицу маршрутизации, назовем ее vpn
:
echo 200 vpn >> /etc/iproute2/rt_tables
Теперь введем правило:
ip rule add from 10.0.0.0/24 table vpn
где я предположил, что сеть eth1
- 10.0.0.0/24
, если это не так, измените ее соответствующим образом.
Наконец, вам нужно будет ввести правило iptables MASQUERADE:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Это оно.