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

Направить ipsec на openvpn с помощью iptables

Я не очень опытный пользователь, но у меня есть решимость, после недели без прогресса все становится грубо.

У меня есть два сетевых адаптера, один обращен к Интернету, а другой - к внутренней сети. Как компьютеры из внутренней сети, так и роутеры из Интернета подключаются к ipsec и получают доступ к ресурсам сервера. Клиенты должны иметь возможность просматривать Интернет при подключении к ipsec. Весь интернет-трафик должен проходить через туннель openvpn.

-----------------------------|          SERVER         |-----------------------------
-----------------------------|192.168.1.1   192.168.2.1|-----------------------------
-------------{INTERNET}======{eth0                 eth1}==<ROUTER>==<INTERNAL NETWORK>
-----------------------------|    \               /    |-----------------------------
-----------------------------|    {openvpn---tun0}     |-----------------------------
-----------------------------|                  /      |-----------------------------
<ROADWARRIOR>==>{INTERNET}==>{eth0--------------       |-----------------------------
-----------------------------|192.168.1.1              |-----------------------------

IPSec работает, и я могу подключиться к серверу. OpenVPN тоже работает. Основная проблема заключается в маршрутизации. Как направить весь трафик, предназначенный для Интернета, через туннель openVPN? У меня есть следующие правила iptables, но они не работают. Что мне не хватает?

iptables -P INPUT   DROP
iptables -P OUTPUT  DROP 
iptables -P FORWARD DROP

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m conntrack --ctstate ESTABLISHED --dport 1194 -j ACCEPT

iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m conntrack --ctstate NEW,ESTABLISHED --dport 1194 -j ACCEPT

# allow IPSec INPUT on the EXTERNAL interface
iptables -A INPUT -p udp -d 192.168.1.1 -s 0.0.0.0/0 --dport 500 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.1.1 -s 0.0.0.0/0 --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -d 192.168.1.1 -s 0.0.0.0/0 -j ACCEPT

# allow IPSEC OUTPUT on the EXTERNAL interface
iptables -A OUTPUT -p udp -d 0.0.0.0/0 -s 192.168.1.1 --sport 500 -j ACCEPT
iptables -A OUTPUT -p udp -d 0.0.0.0/0 -s 192.168.1.1 --sport 4500 -j ACCEPT
iptables -A OUTPUT -p esp -d 0.0.0.0/0 -s 192.168.1.1 -j ACCEPT

# allow IPSec INPUT on the INTERNAL interface
iptables -A INPUT -p udp -d 192.168.2.1 -s 0.0.0.0/0 --dport 500 -j ACCEPT
iptables -A INPUT -p udp -d 192.168.2.1 -s 0.0.0.0/0 --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -d 192.168.2.1 -s 0.0.0.0/0 -j ACCEPT

# allow IPSec OUTPUT on the INTERNAL interface
iptables -A OUTPUT -p udp -d 0.0.0.0 -s 192.168.2.1 --sport 500 -j ACCEPT
iptables -A OUTPUT -p udp -d 0.0.0.0 -s 192.168.2.1 --sport 4500 -j ACCEPT

РЕДАКТИРОВАТЬ: Я ранее включал ip_forward, и, к сожалению, предложенные вами правила мне не помогли, боюсь. Я все еще не могу получить доступ к Интернету. Я что-то упускаю?

Вам необходимо настроить MASQUERADE Правило для трафика, идущего из интерфейса OpenVPN в Интернет. Кроме того, вы включили ip_forward?

iptables -t nat -A PREROUTING -i tun0 -j MARK --set 0x029a
iptables -A FORWARD -i tun0 -m mark --mark 0x29a -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 0x29a -j MASQUERADE

По сути, ваши текущие правила отбрасывают весь пересылаемый трафик, исходящий от tun0.

Чтобы включить ip_forward, вы должны установить это значение на /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Это значение будет работать после перезагрузки, но вы также можете сразу изменить его:

echo 1 > /proc/sys/net/ipv4/ip_forward

Это должно сработать.