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

OpenVPN и перенаправление портов

У меня проблема с моим сервером на базе Linux, связанная с VPN и переадресацией портов. Я тоже новичок в этой сфере, так что простите мне любую ошибку.

Во-первых, позвольте мне описать вам инфраструктуру. У меня Linux VPS-сервер (S1) с правильно настроенным openvpn и машина с Linux (C1) также с правильно настроенным openvpn. Они подключены с использованием номера порта 1194. Это в основном схема:

    S1
    [ip: X.X.X.221]
    [tun0 ip: 10.8.0.1]

    C1
    [ip: Y.Y.Y.19]
    [tun0 ip: 10.8.0.6]

Когда я говорю, что все настроено правильно, это потому, что я могу успешно пинговать 10.8.0.1 из C1.

Вот и проблема ... У меня есть услуга P1 работает в порту 1800 в S1, и клиент этой службы в C1. Я могу успешно дать IP-адрес X.X.X.221: 1800 клиенту в C1, но я хочу, чтобы клиент получил доступ P1 через VPN-соединение. Это способ сделать это?

Сначала я подумал, что это просто проблема с переадресацией порта, и все, что мне нужно было сделать, это пересылать каждый запрос с порта. 1194 портировать 1800, и я нашел эту команду для этого (кстати, Venet0 это мой интерфейс):

    iptables -t nat -A PREROUTING -i venet0 -p udp --dport 1194 -j REDIRECT --to-port 1800

Но это не сработает.

Любая помощь? Спасибо :)


РЕДАКТИРОВАТЬ1:

Результат выдачи netstat -rn и 10.8.0.6 в S1:

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    10.8.0.2        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
    10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
    0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 venet0

    traceroute to 10.8.0.6 (10.8.0.6), 30 hops max, 60 byte packets
     1  10.8.0.6 (10.8.0.6)  116.769 ms  119.000 ms  120.618 ms

Результат выдачи netstat -rn и traceroute 10.8.0.1 в C1:

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 eth0
    10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
    10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
    192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

    traceroute to 10.8.0.1 (10.8.0.1), 30 hops max, 38 byte packets
     1  10.8.0.1 (10.8.0.1)  83.825 ms  83.639 ms  86.877 ms

РЕДАКТИРОВАТЬ 2:

Файл конфигурации для S1 (Я верю, что начинается с ; не считается):

    ;local a.b.c.d
    port 1194
    proto udp
    dev tun
    ;dev-node MyTap
    ca ca.crt
    cert server.crt
    key server.key  # This file should be kept secret
    dh dh2048.pem
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
    ;push "route 192.168.10.0 255.255.255.0"
    ;push "route 192.168.20.0 255.255.255.0"
    ;client-config-dir ccd
    ;route 192.168.40.128 255.255.255.248
    ;client-config-dir ccd
    ;route 10.9.0.0 255.255.255.252
    ;learn-address ./script
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option WINS 8.8.4.4"
    ;client-to-client
    ;duplicate-cn
    keepalive 10 120
    ;tls-auth ta.key 0 # This file is secret
    ;cipher BF-CBC        # Blowfish (default)
    ;cipher AES-128-CBC   # AES
    ;cipher DES-EDE3-CBC  # Triple-DES
    comp-lzo
    ;max-clients 300
    user root
    group root
    persist-key
    persist-tun
    status openvpn-status.log
    ;log         openvpn.log
    ;log-append  openvpn.log
    verb 3
    ;mute 20

Файл конфигурации для C1

    client
    remote 176.9.192.221 1194
    ca ca.crt
    cert client.crt
    key client.key
    cipher BF-CBC
    comp-lzo
    dev tun
    proto udp
    nobind
    persist-key
    persist-tun
    user root
    group root

Похоже, что ваша конфигурация службы S1 не прослушивает интерфейс tun. С маршрутизацией проблем нет. Какая у вас услуга? Вы можете показать его конфиг? В любом случае - попробуйте
telnet 10.8.0.1 1800 на S1 telnet X.x.x.221 1800 на S1. Если вы получите ответ в одном из случаев - найдите проблему в конфигурационном файле сервиса.

Таким образом, ваша служба S1 должна прослушивать IP-адрес VPN, 10.8.0.1, а ваш клиент C1 должен подключаться к 10.8.0.1:1800 ... если ваша VPN полностью работает.

Вы можете вручную удалить существующие статические маршруты на C1 для 10.8.0.1 и 10.8.0.5; пример:

route del -net 10.8.0.1 gw 10.8.0.5 netmask 255.255.255.255 dev tun0

Затем добавьте новый маршрут на C1, используя:

route add -net 10.8.0.1 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

Посмотрите, работает ли это. Не забывайте отслеживать свои старые маршруты на случай, если вам нужно будет добавить их повторно. Это должно решить вашу проблему с маршрутизацией VPN.

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

На C1:

route add -net X.X.X.221 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

На S1:

route add -net Y.Y.Y.19 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

Примечание: я бы не рекомендовал это, если вы не можете отменить свои изменения; на случай, если это не сработает.

Вы также можете попробовать использовать push route в вашей конфигурации OpenVPN. Например:

push "route  X.X.X.221 255.255.255.0"

Наконец, если ничего из этого не работает, вы можете попробовать добавить что-нибудь в свои IPTABLES для пересылки трафика из вашей сети VPN (NAT) в вашу локальную сеть на S1. Что-то вроде:

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -s 10.8.0.6 -p tcp --dport 1800 -j DNAT --to-destination X.X.X.221:1800