配置服务器以通过 OpenVPN 路由所有流量

配置服务器以通过 OpenVPN 路由所有流量

我有一个运行良好的 openvpn 设置。有大约 50 个客户端连接,一切都很方便。我需要其中一个客户端将所有流量路由到 vpn。我ccd为该特定客户端设置了一个,并将添加到push "redirect-gateway def1"其中。路由表似乎在客户端中更新。我可以访问 vpn 中的所有主机,但无法访问 vpn 之外的任何其他内容。从客户端跟踪路由时,所有内容都转到 vpn 网关,但之后不会再进一步​​。我相信罪魁祸首是服务器中的 iptables 配置。

这是设置

  • 我有一个使用子网 10.170.xx 的 openvpn,其 vpn 网关为 10.170.0.1(VPNGATEWAY)
  • 我有一个不同的子网 10.171.xx,它的 IP 通过 ccd 记录分配(这是管理网络,有 3 个客户端)
  • 我希望所有流量都通过 VPN 的客户端是 10.171.0.1(客户端)

从 10.171.0.1 (客户端) 我可以 ping 10.170.0.1 (VPNGATEWAY)。实际上,我可以 ping 10.170.xx 和 10.171.xx 中的所有主机,但无法 ping 8.8.8.8。

这是 iptables 配置

有很多规则,我把它们去掉了,以使其更简单。

*filter
:INPUT DROP [1000:900000]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -s 127.0.0.1 -j ACCEPT 

# here were some rules accepting certain ports  22, 80, etc

-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 13 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 30 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 

# this is the client that needs internet thru the gateway
# i've tried to make as permissive as possible but still to no avail
-A INPUT -s 10.171.0.1 -j ACCEPT
-A FORWARD -s 10.171.0.1 -j ACCEPT

-A FORWARD -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
COMMIT

我还尝试添加

iptables -t nat -A POSTROUTING -s 10.171.0.1 -o eth0 -j MASQUERADE

但还是没用。有什么想法吗?

答案1

您有这两条规则来允许您的流量。但这些规则可能不是您想要的。
或者至少不是您唯一想要的。

-A INPUT -s 10.171.0.1 -j ACCEPT
-A FORWARD -s 10.171.0.1 -j ACCEPT

您的防火墙规则集似乎设计为有状态的,但这两条规则是无状态的。您要么需要添加两条规则来处理另一个方向的流量,要么添加一些状态匹配。

相关内容