Назад | Перейти на главную страницу

Маршрутизация трафика из VPN на другое сетевое устройство

Наконец, я запустил OpenVPN, но теперь мне очень не хватает доступа ко всем моим веб-сервисам (apache, ftp, ssh и т. Д.) Через VPN-сервер. Есть ли просто способ направить весь трафик от моего wlan1 устройство для tap0?

server.conf:

port 1193
proto tcp
dev tap0
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
ifconfig-pool-persist ipp.txt
server 10.8.0.0 255.255.255.0
keepalive 10 120
;tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
script-security 2

Я действительно надеялся, что этот форвард решит проблему, но это было не так:

/sbin/iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
/sbin/iptables -A FORWARD -i wlan -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

Настроить:

Это в основном моя установка: DSL router -> Wireless router -> Ubuntu server.

На Ubuntu server Я размещал apache, ssh и другие серверные приложения и службы. Когда клиент обращается к моему серверу через VPN, я хотел бы получить доступ ко всем этим услугам.

Вы все еще не предоставили много деталей, поэтому я предполагаю, что ваша установка выглядит следующим образом. Обычно вы получаете доступ к службам на своем сервере по его общедоступному IP-адресу (или имени хоста, которое разрешает его), например http://1.2.3.4/. Когда вы запускаете VPN, OpenVPN подключается к тому же общедоступному IP-адресу 1.2.3.4, и пока VPN работает, вы получаете доступ к службам, используя частный IP-адрес VPN сервера, например http://10.8.0.1/. Вы хотите иметь возможность использовать общедоступный IP-адрес независимо от того, работает VPN или нет.

Лучшее решение - использовать отдельный IP-адрес для сервера OpenVPN, поскольку это значительно упрощает маршрутизацию. Однако я предполагаю, что у вас нет этой возможности.

Проблема в том, что даже когда вы маршрутизируете весь трафик через VPN, трафик на общедоступный IP-адрес VPN-сервера должен маршрутизироваться через шлюз по умолчанию, чтобы зашифрованные пакеты VPN действительно попали туда. Таблица маршрутизации выглядит примерно так:

192.168.0.0/24 dev eth0
1.2.3.4/32 via 192.168.0.1
10.8.0.1/32 dev tun0
default via 10.8.0.1

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

  1. Создайте новую таблицу маршрутизации (нужно сделать только один раз):

    echo 1 vpn >> /etc/iproute2/rt_table
    
  2. Маршрутизируйте все, используя эту новую таблицу, через VPN:

    ip route add default via 10.8.0.1 table vpn
    
  3. Скажите ядру использовать эту новую таблицу для всех пакетов с определенной меткой межсетевого экрана:

    ip rule add fwmark 0x01 lookup vpn
    
  4. Настройте правила брандмауэра, чтобы отметить пакеты, которые вы хотите маршрутизировать через VPN:

    iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 0x01
    iptables -t mangle -A OUTPUT -p udp ! --dport 1193 -j MARK --set-mark 0x01
    

Вы, вероятно, захотите настроить это в up скрипт на клиенте и разорвать его в down сценарий.