Я не очень опытный пользователь, но у меня есть решимость, после недели без прогресса все становится грубо.
У меня есть два сетевых адаптера, один обращен к Интернету, а другой - к внутренней сети. Как компьютеры из внутренней сети, так и роутеры из Интернета подключаются к 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
Это должно сработать.