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

Как настроить iptables для коммутируемого VPN с OpenVPN и двумя интерфейсами?

У меня есть экземпляр AWS EC2, работающий под управлением Amazon Linux, к которому подключены два эластичных сетевых интерфейса (ENI): eth0 и eth1. Я подключаюсь к публичному IP на eth0. Все работает отлично, за исключением того, что я хотел бы направлять незашифрованный трафик из eth1. т.е. клиент подключается к eth0 для настройки зашифрованного VPN-туннеля, затем его незашифрованный интернет-трафик направляется в / из eth1 и обратно через туннель на eth0.

Я недостаточно знаю об iptables, чтобы заставить эту конфигурацию работать, несмотря на попытки в течение нескольких часов. Надеюсь, это просто?

Я установил последнюю версию OpenVPN из исходников и сделал следующее:

  1. Отключена проверка источника / назначения на интерфейсах
  2. В "rc.local" добавлено следующее: echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
  3. Добавлены следующие команды iptables: iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth0 -j MASQUERADE

Файл конфигурации моего сервера выглядит так:

port 443
proto tcp-server
dev tun
tls-server
server 10.18.14.0 255.255.255.0

ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/vpnserver.crt
key /etc/openvpn/pki/vpnserver.key
dh /etc/openvpn/pki/dh.pem

ifconfig-pool-persist ipp2.txt 
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 5 15
comp-lzo
max-clients 5
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn_road.log
verb 6 
mute 20

tun-mtu 1500
auth SHA1
keysize 128
cipher BF-CBC

Вам нужно настроить маршрутизацию, ваши правила выглядят нормально, но вам нужно изменить правило MASQ.

iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE

Я бы также предложил несколько более простых правил для исходящих пакетов.

# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Что касается маршрутизации, я предполагаю, что вы хотите, чтобы клиенты OpenVPN выходили только через eth1, а не через сам сервер, который, как я полагаю, имеет маршрут по умолчанию через eth0. Нам нужно создать новую таблицу маршрутизации для ваших клиентов OpenVPN, мы назовем ее ovpn-inet.

редактировать /etc/iproute2/rt_tables, вставьте в конце следующее и сохраните.

1 ovpn-inet

Затем создайте /etc/sysconfig/network-scripts/route-eth1 со следующим содержанием, заменив <gw on eth1> и другие атрибуты внутри <>.

default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet

Теперь создайте /etc/sysconfig/network-scripts/rule-eth1

from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet

Было бы также предложено переключить OpenVPN на UDP для повышения производительности. Это также позволит вам запустить HTTPS-сервер, если он вам когда-нибудь понадобится, через TCP. Также рассмотрите возможность использования tls-crypt в конфигурации вашего сервера OpenVPN, как простой способ немного укрепить вашу установку.

proto udp4

Теперь перезапустите сеть, чтобы изменения вступили в силу.

/etc/init.d/network restart