iptables 使用 pptp 和 openvpn 转发

iptables 使用 pptp 和 openvpn 转发

我在 VPS 上安装了 OpenVPN 和 PPTP。我有几个问题似乎无法得到明确的答案。

我想在 1.1.1.1(eth0,公共 IP 地址)上安装 OpenVPN,在 1.1.1.2(eth0:1,公共 IP 地址)上安装 PPTP。我通过 SNAT 实现了这一点。然而,从我读过的所有教程来看,它建议将 ppp+ 转发到 eth0,反之亦然,对于 tun 接口也是如此。

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT

我的设置是 CentOS,专用服务器。

出于某种原因,我假设 iptables 会将所有流量从 eth0 路由到 tun0 并在此停止。

  1. 这些前向规则会相互冲突吗?
  2. 我是否需要将 ppp+ 转发到 eth0:1 以避免冲突?有可能吗?我还没想出办法。
  3. iptables 是否足够智能,可以通过这些规则路由特定于 tun 和 ppp 的流量?

答案1

如果我理解正确的话,您需要一个 OpenVPN 隧道和一个 PPTP 隧道,每个隧道都会将隧道流量路由到 eth0,但每个隧道都有自己的 IP。

如果我错了,请尝试澄清,我会尽我所能提供帮助。但是,我相信这个脚本会满足您的要求。

#!/bin/bash

# This enables forwarding in the kernel.
echo 1 > /proc/sys/net/ipv4/ip_forward

# This will allow all return traffic to pass back to the originating socket
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# This permits forwarding traffic that came in either tunnel and bound out eth0.
# Note: This does not explicitly permit forwarding between tunnels.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT

# This blocks all forwarding that is not explicitly permitted.
# Removing this line would be unsafe.
iptables -A FORWARD -j DROP

# These lines will SNAT the traffic coming from each tunnel to the
# appropriate IP address.
iptables -t nat -A POSTROUTING -i tun0 -o eth0 -j SNAT --to-source 1.1.1.1
iptables -t nat -A POSTROUTING -i ppp+ -o eth0 -j SNAT --to-source 1.1.1.2

多次运行此脚本将导致规则建立。以下脚本将刷新您的防火墙规则并禁用转发。我通常将其包含在防火墙脚本的开头,但我不知道这样做是否安全,因此我将其单独包含在内。

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t filter -F
iptables -t nat -F

相关内容