Мучаюсь с этой бедой почти два месяца. Я объясню ситуацию. Я работаю из дома, и для доступа к большинству услуг моей компании мне нужно использовать клиент openvpn. Дело в том, что у меня дома три компьютера, один сервер общего назначения, мой персональный компьютер и служебный ноутбук. Я уже давно настроил nat и маршруты для доступа с моего персонального компьютера на серверы компании, идущие через клиент openvpn, работающий на моем ноутбуке. Я беспокоюсь о его батарее, потому что я каждый день оставляю его подключенным к зарядному устройству, поэтому после долгих раздумий я решил переместить клиент openvpn в контейнер на моем сервере, чтобы использовать его в качестве маршрутизатора для подключения к серверам компании.
Я настроил контейнер с помощью macvlan с диапазоном IP-адресов моей локальной сети, привилегированными правами и разрешениями net_admin. После нескольких месяцев проб и ошибок я заработал только один раз, затем мой сервер умер, и я забыл, какие iptables я установил в контейнер, чтобы он заработал. Я не прописал это в скрипте точки входа из-за нехватки времени и теперь мне снова придется с этим разбираться.
Все на сервере openvpn, сети и серверах компании знает, как перенаправить каждый IP-адрес клиентов vpn.
Теперь мне нужно направить мою локальную сеть через клиент openvpn внутри контейнера.
Подробности:
- Локальная сеть: 192.168.0.0/24
- Локальный шлюз: 192.168.0.1
- ПК: 192.168.0.17
- Домашний сервер: 192.168.0.16
- Контейнер: 192.168.0.242
- Клиент OpenVPN: 10.1.2.4
- Шлюз OpenVPN: 10.1.2.1
- Диапазон серверов компании: 192.168.2-19.0/24
На моем домашнем сервере (192.168.0.16) все работает отлично. Мне нужно было только добавить несколько маршрутов, указывающих на IP-адрес контейнера. ip маршрут добавить 192.168.19.0/24 через 192.168.0.242
Но то, что я не могу заставить работать, это остальная часть локальной сети. На моем персональном компьютере я настроил маршрутизатор, указывающий на IP-адрес контейнера (192.168.0.242) для диапазона серверов компании, как я сделал на своем сервере.
Если я запускаю ping для любого из них, я вижу с помощью tcpdump и tshark, что он достигает пункта назначения на другой стороне (ПК> Домашний сервер> Контейнер> VPN-клиент> VPN-сервер> Шлюз> Сервер). Это достигает пункта назначения, как и предполагалось, но когда он возвращается на мой компьютер (Сервер> Шлюз> VPN-сервер> VPN-клиент)
Ответ ping возвращается и умирает на контейнере, поэтому проблема, которую я должен решить сейчас, заключается в том, как сделать контейнер nat или переслать этот пакет на мой персональный компьютер.
Я точно знаю, что мне нужно добавить или удалить внутри контейнера только правила iptables.
На моей точке входа у меня есть эти iptables, которые загружаются после запуска клиента open vpn.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A ВПЕРЕД -i tun0 -o eth0 -j ПРИНЯТЬ
iptables -A ВПЕРЕД -i eth0 -o tun0 -j ПРИНЯТЬ
Если стоит упомянуть, только с этими правилами, я заработал на своем ноутбуке.
Также контейнер может достигать всего с обеих сторон, пинговать до одного из серверов компании и пинговать свой собственный хост или отлично пинговать мой персональный компьютер.