我有一个运行 Amazon Linux 的 AWS EC2 实例,它连接了两个弹性网络接口 (ENI):eth0 和 eth1。我正在连接到 eth0 上的公共 IP。一切正常,只是我想将未加密的流量路由出 eth1。即客户端连接到 eth0 以设置加密的 VPN 隧道,然后他/她的未加密互联网流量将路由进出 eth1 并通过 eth0 上的隧道返回。
尽管尝试了几个小时,但我对 iptables 的了解还不够,无法使此配置正常工作。我希望这是一个简单的配置?
我已经从源代码安装了最新版本的 OpenVPN,并执行以下操作:
- 禁用接口上的源/目标检查
- 在“rc.local”中添加了以下内容:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
- 添加了以下 iptables 命令:
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth0 -j MASQUERADE
我的服务器配置文件如下所示:
端口 443 proto tcp 服务器 开发调谐 tls 服务器 服务器 10.18.14.0 255.255.255.0 ca /etc/openvpn/pki/ca.crt 证书 /etc/openvpn/pki/vpnserver.crt 密钥 /etc/openvpn/pki/vpnserver.key dh /etc/openvpn/pki/dh.pem ifconfig-pool-persist ipp2.txt 推“重定向网关 def1 旁路-dhcp” 推“dhcp-选项 DNS 8.8.8.8” 推“dhcp-选项 DNS 8.8.4.4” 保持活动 5 15 康普 最大客户端数 5 持久密钥 坚持-tun 状态 openvpn-status.log 日志附加 /var/log/openvpn_road.log 动词 6 靜音 20 tun-mtu 1500 授权 SHA1 密钥大小 128 密码 BF-CBC
答案1
您需要设置路由,您的规则看起来不错,但您需要更改 MASQ 规则。
iptables -t nat -A POSTROUTING -s 10.18.14.0/24 -o eth1 -j MASQUERADE
我还会为您的原始数据包建议一些更简单的规则。
# Allows packets from connections initiated by the box or already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
现在至于路由,我假设您只希望 OpenVPN 客户端通过 eth1 退出,而不是服务器本身,我假设服务器本身具有通过 eth0 的默认路由。我们需要为您的 OpenVPN 客户端创建一个新的路由表,我们将其称为 ovpn-inet。
编辑/etc/iproute2/rt_tables
,在末尾插入以下内容并保存。
1 ovpn-inet
然后/etc/sysconfig/network-scripts/route-eth1
使用以下内容创建,替换<gw on eth1>
其中的其他属性<>
。
default via <gw for eth1> dev eth1 table ovpn-inet
<local network on eth1> dev eth1 src <eth1 ip adress> table ovpn-inet
现在创建/etc/sysconfig/network-scripts/rule-eth1
from <ip address of eth1>/32 table ovpn-inet
from 10.18.14.0/24 table ovpn-inet
to <ip address of eth1>/32 table ovpn-inet
还有一个建议是将 OpenVPN 切换到 UDP,以提高性能。如果您需要通过 TCP 运行 HTTPS 服务器,这也将允许您运行 HTTPS 服务器。还可以考虑tls-crypt
在 OpenVPN 服务器配置中使用,这是对您的安装进行一些强化的简单方法。
proto udp4
现在重新启动网络以使更改生效。
/etc/init.d/network restart