Виртуальная машина Debian 8 на моем сервере ESXi работает на сервере OpenVPN, который работал нормально, пока я не решил добавить еще один интерфейс к машине с другим IP. Я хотел бы использовать один IP исключительно для трафика VPN, а не для администрирования сервера.

Это оба внешних IP-адреса. Поставщик, с которым я работаю, использует довольно странную конфигурацию, однако мне нужно настроить шлюз на IP-адрес вне подсети. И так как не многие ОС просто принимают это, я должен создать статический маршрут.

Вот как это выглядит:

root@ln-1:/etc/openvpn# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx
          inet addr:92.xxx.xxx.xxx  Bcast:92.xxx.xxx.xxx  Mask:255.255.255.255
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:271765 errors:0 dropped:10 overruns:0 frame:0
          TX packets:4545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16520579 (15.7 MiB)  TX bytes:1027263 (1003.1 KiB)

eth1      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:217.xxx.xxx.xxx  Bcast:217.xxx.xxx.xxx  Mask:255.255.255.255
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:271152 errors:0 dropped:9 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16727664 (15.9 MiB)  TX bytes:1598 (1.5 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:45 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2774 (2.7 KiB)  TX bytes:0 (0.0 B)

И маршруты, я настроил маршрут к 91.xxx.xxx.xxx (который является шлюзом) на обоих интерфейсах, но я сделал значение по умолчанию на eth0, которое заставляет машины использовать этот по умолчанию, я думаю, но я хочу VPN-трафик проходит через eth1, используя тот же IP-адрес шлюза:

root@ln-1:/etc/openvpn# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         91.xxx.xxx.xxx  0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
91.xxx.xxx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 eth1
91.xxx.xxx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 eth0

И конфигурация iptables:

root@ln-1:/etc/openvpn# iptables-save
# Generated by iptables-save v1.4.21 on Tue May  9 00:08:15 2017
*filter
:INPUT DROP [8286:454500]
:FORWARD DROP [801:48621]
:OUTPUT ACCEPT [4648:980772]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -i eth1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -o eth1 -j ACCEPT
COMMIT
# Completed on Tue May  9 00:08:15 2017
# Generated by iptables-save v1.4.21 on Tue May  9 00:08:15 2017
*nat
:PREROUTING ACCEPT [19909:1034285]
:INPUT ACCEPT [54:2776]
:OUTPUT ACCEPT [144:10480]
:POSTROUTING ACCEPT [144:10480]
-A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
COMMIT
# Completed on Tue May  9 00:08:15 2017

SSH Я хотел бы перейти через eth0, остальное VPN-трафик проходит через порт 443, а через порт 80 я использую настройку OpenVPN, чтобы ее было легко найти. Конфигурация OpenVPN включает в себя следующие строки:

local 217.xxx.xxx.xxx
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Переадресация IP включена, и все работало до тех пор, пока я не захотел использовать eth0 для всего, за исключением VPN-трафика, и eth1 только для VPN-трафика.

Кажется, я не могу заставить это работать, я много искал, но не могу найти никого с подобной настройкой, который бы это решил. Любая помощь будет принята с благодарностью!

Если я пропустил что-то важное, пожалуйста, сообщите мне, и я добавлю это, конечно, также я новичок в фактическом размещении информации на этом сайте, пожалуйста, извините, если я делаю что-то не так.

РЕДАКТИРОВАТЬ 10 мая 2017 г. 22:07 CEST: У меня есть новая информация: Судя по всему, OpenVPN пытается маршрутизировать / пересылать с tun0 на eth0, я экспериментировал с журналированием iptables:

-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 4
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 4

Который показал мне это:

May 10 21:20:15 ln-1 kernel: [176312.426411] iptables_FORWARD_denied: IN=tun0 OUT=eth0 MAC= SRC=10.8.0.6 DST=157.56.144.215 LEN=89 TOS=0x00 PREC=0x00 TTL=127 ID=1513 PROTO=UDP SPT=57959 DPT=3544 LEN=6

Я также удивлен, что вижу здесь PROTO=UDP потому что и сервер, и клиент настроены на использование TCP.

1 ответ1

0

Вы можете использовать локальный параметр в файле конфигурации OpenVPN, чтобы заставить клиента связываться с интерфейсом, используя определенный IP-адрес.

--local host

Local host name or IP address for bind. If specified, OpenVPN will bind to this address only. If unspecified, OpenVPN will bind to all interfaces.

Вы также можете указать это в файле конфигурации клиента

local ip.add.re.ss

При этом ВХОДЯЩИЕ VPN-СОЕДИНЕНИЯ (только туннель, а не пересылаемые пакеты) будут приниматься только через eth1. Теперь, если вы хотите использовать eth1 для маршрутизации трафика, поступающего из VPN в Интернет, вам нужно использовать маршрутизацию на основе политик. Что-то вроде

ip rule add from / table ip route add 1.2.3.4/24 с помощью таблицы dev tun0

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

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

Я думаю, что с помощью правила вы можете точно настроить свои настройки для работы.

Здесь больше ссылок на маршрутизацию на основе источников здесь:

SuperUser - маршрутизация на основе исходного кода и NAT (DNAT/SNAT), также известные как мульти-глобальные сети на CentOS 5

Удачи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .