使用 iptables 将 ipsec 路由到 openvpn

使用 iptables 将 ipsec 路由到 openvpn

我并不是一位经验丰富的用户,但是我有决心,经过一周毫无进展之后,情况就变得艰难了。

我有两个 NIC,一个面向互联网,一个面向内部网络。内部网络的计算机和互联网的 roadwarriors 都通过 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,但遗憾的是,您建议的规则对我没有帮助。我仍然无法访问互联网。我是不是漏掉了什么?

答案1

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

那应该可行。

相关内容