使用iptables将ipsec路由到openvpn

我不是一个非常有经验的用户,但我确实有决心,一个星期后,没有进步,它变得越来越粗糙。

我有两个网卡,一个面向互联网,一个面向内部networking。 来自内部networking的两台电脑和来自互联网的道路战士都使用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,不幸的是,你所build议的规则不帮助我,我害怕。 我仍然无法访问互联网。 我错过了什么吗?

您需要为从OpenVPN接口到Internet的stream量设置MASQUERADE规则。 另外,你有没有启用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转发stream量。

要启用ip_forward,你必须在/etc/sysctl.conf设置这个值:

 net.ipv4.ip_forward = 1 

该值将在重新启动后生效,但您也可以立即更改:

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

这应该工作。