Как маршрутизировать трафик openvpn через второй сетевой адаптер для доступа в Интернет

Я запускаю сервер ubuntu с двумя сетевыми адаптерами eth0 и usb0, оба с отдельными подключения к Интернету. Сервер openvpn прослушивает eth0, и клиент может подключиться к vpn, используя общедоступный IP-адрес eth0, и получить доступ к Интернету через VPN. Поскольку я нажимаю маршрут шлюза по умолчанию в файле конфигурации сервера openvpn с помощью

     push "redirect-gateway def1 bypass-dhcp"

и добавляю UFW before.rules

    # START OPENVPN RULES
    # NAT table rules
    *nat
    :POSTROUTING ACCEPT [0:0]
    -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
    COMMIT
    # END OPENVPN RULE

, я смог направить весь клиентский интернет-трафик через шлюз eth0.

Теперь я пытаюсь перенаправить трафик клиентов vpn, который подключен к VPN, через внешний IP-адрес eth0, чтобы использовать шлюз usb0 вместо шлюза eth0 по умолчанию для доступа в Интернет. поэтому я попытался изменить правило POSTROUTING UFW на

    -A POSTROUTING -s 10.8.0.0/8 -o usb0 -j MASQUERADE

, но это, похоже, не работает, трафик не маршрутизируется с интерфейса tun0 (VPN) на интерфейс usb0.

Вот так, я хочу, чтобы моя связь выглядела. Клиент получит доступ к серверу openvpn, используя статический общедоступный IP-адрес адаптера eth0. И этот трафик должен быть перенаправлен на шлюз usb0 для доступа в Интернет.

    Client(10.8.0.2) --> tun0(VPN adapter, accepting connections on eth0) --> usb0 --> Internet

Я уверен, что не понимаю правила маршрутизации. Любая помощь приветствуется. Спасибо.

0
задан 23 April 2021 в 12:35
1 ответ

После того, как вы настроили OpenVPN и ваши клиенты смогут подключаться к серверу, забудьте, что это VPN. Угрожайте, как будто это просто еще одна сетевая карта.

Итак, у вас есть сервер с тремя сетевыми адаптерами, одной LAN (tun0) и двумя WAN. Вы хотите направить некоторых клиентов (самих себя, локальные процессы) через одну глобальную сеть (eth0), а других клиентов (тех, кто находится за tun0) через другую глобальную сеть (usb0).

Для этого вам потребуется (не очень) сложная настройка маршрутизации, которая включает в себя установку двух разных маршрутов по умолчанию, активных одновременно. Для этого вы будете использовать базу данных политик маршрутизации (RPDB).

Ключевым моментом является метод настройки, называемый разделенный доступ , который описан в Linux Advanced Routing And Traffic Control HOWTO (также известном как LARTC). Ниже приводится лишь слегка адаптированная копия этой страницы.

Вы будете использовать две дополнительные таблицы маршрутизации. Лучше назначить им символические псевдонимы, что делается в файле / etc / iproute2 / rt_tables :

echo "101 eth0_wan" >> /etc/iproute2/rt_tables
echo "102 usb0_wan" >> /etc/iproute2/rt_tables

Теперь у вас определенно есть несколько адресов на ваших сетевых адаптерах и маршруты по умолчанию на сетевых адаптерах глобальной сети, т. Е. шлюзы для каждой ссылки. Вы настраиваете маршруты по умолчанию, каждый к своей собственной таблице. Также добавьте маршрут по умолчанию в основную таблицу:

ip route add default via ${GW_ETH0} table eth0_wan
ip route add default via ${GW_USB0} table usb0_wan
ip route add default via ${GW_ETH0}

Вы можете предположить, что последняя строка уже была выполнена ifupdown , если вы указали шлюз в / etc / network / interfaces .

Теперь создайте правила (политики) маршрутизации, которые инструктируют пакеты с адресом источника некоторого NIC выходить через этот NIC, а также направляют пользователей OpenVPN на usb0 :

ip rule add from ${ADDR_ETH0} lookup eth0_wan
ip rule add from ${ADDR_USB0} lookup usb0_wan
ip rule add from ${NETWORK_OPENVPN} lookup usb0_wan

Все эти команды могут быть добавлены в / etc / network / interfaces файл post-up перехватчик. Обычно вам не нужно удалять соответствующие маршруты по умолчанию в хуке pre-down , но будет проще, если вы удалите там правила маршрутизации.

И настройте NAT, конечно, вы это сделали, но я уточню здесь для полноты:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE

(для этих правил, вероятно, нужны более строгие критерии соответствия).

0
ответ дан 24 April 2021 в 02:06

Теги

Похожие вопросы