我并不是一位经验丰富的用户,但是我有决心,经过一周毫无进展之后,情况就变得艰难了。
我有两个 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
那应该可行。