目标与问题

目标与问题

目标与问题

我努力了非常很难解决这个问题,但我被困住了。我并不想创建站点到站点的 VPN,仅供参考。

我已经使用 ansible 成功安装了 OpenVPN:https://github.com/BastiPaeltz/ansible-openvpn(需要相当多的补丁才能使其与 python3 和最新的 easyrsa 版本兼容,并修复一些错误)。

我已成功将我的 AWS VPC()的路由推送给172.31.0.0/16客户端,并且他们可以连接到该网络中的主机,但是当我将它们配置为不通过 VPN 路由所有流量(即不重定向其网关)时,此功能将停止工作。

我需要做什么才能保留对我的 VPC 的远程访问,但不让客户端重定向其网关?我真的很难理解 OpenVPN 文档。我没有找到关于如何设置简单远程访问 VPN 的简单示例,但也许它在那里,我因为缺乏这方面的经验而错过了它。

配置:

server.conf

注意:注释掉并push "redirect-gateway def1"不能解决问题。

dev tun-udp-1194

server 10.9.80.0 255.255.240.0

proto udp

port 1194



ca /etc/openvpn/pki/ca.crt

cert....

key ...

dh /etc/openvpn/pki/dh.pem

crl-verify /etc/openvpn/pki/crl.pem



#push "redirect-gateway def1"



route 172.31.0.0 255.255.0.0



# Fix for the Windows 10 DNS leak described here:

# https://community.openvpn.net/openvpn/ticket/605

push block-outside-dns



remote-cert-tls client

keepalive 10 120

tls-auth /etc/openvpn/pki/ta.key 0

cipher AES-256-CBC

tls-cipher TLS-DHE-DSS-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-DSS-WITH-AES-256-CBC-SHA256

auth SHA256

tls-version-min 1.2

comp-lzo

persist-key

persist-tun

verb 0

client.conf

注意,添加pull-filter ignore redirect-gateway会完全破坏 VPN,我无法访问 VPC;注释掉则redirect-gateway def1没有任何作用。

client

remote <my_ip> 1194 udp

# route all traffic through the VPN (comment out to prevent routing

# all traffic through the VPN, and retain your router's public IP, etc)

#redirect-gateway def1



# ignore any redirect-gateway configs pushed from the server; breaks the VPN

#pull-filter ignore redirect-gateway



dev tun

cipher AES-256-CBC

auth SHA256

resolv-retry infinite

nobind

persist-key

persist-tun

remote-cert-tls server

verify-x509-name "<dns_name>" name

tls-version-min 1.2

comp-lzo

key-direction 1

verb 3

这些是iptables我通过此脚本在服务器上配置的规则:

#!/usr/bin/env bash
# Generated by ansible
# This script is used to configure iptables to work with OpenVPN on this host

# Allow connections to the VPN
/sbin/iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# This rule is necessary for OpenVPN to work and forward IP packets
/sbin/iptables -t nat -A POSTROUTING -s 10.9.80.0/20 -o ens5 -j MASQUERADE

/sbin/iptables -A FORWARD -s 10.9.80.0/20 -j ACCEPT

# Allow SSH connections on the VPN
/sbin/iptables -A INPUT -p tcp -d 10.9.80.0/20 --dport 22 -j ACCEPT

输出如下。

root@ip-172-31-38-0:/etc/openvpn# iptables -n -L

链输入(策略接受)目标协议选择源目标
接受udp——0.0.0.0/0 0.0.0.0/0 udp dpt:1194接受tcp——0.0.0.0/0 10.9.80.0/20 tcp dpt:22

链转发(策略接受)目标协议选择源目标
接受全部 -- 10.9.80.0/20 0.0.0.0/0

链输出(策略接受)目标保护选择源目标

root@ip-172-31-38-0:/etc/openvpn# iptables -t nat -n -L

目标 保护 可选 源 目标

链输入(策略接受)目标保护选择源目标

链输出(策略接受)目标保护选择源目标

链 POSTROUTING(策略接受)目标协议选择源目标
MASQUERADE 全部 -- 10.9.80.0/20 0.0.0.0/0

如能以实际配置形式提供任何帮助,我们将不胜感激;谢谢。

答案1

总结就是“推送你想要的路线(和其他选项),不推送你不想要的路线”,其实仅此而已。

  • 为了避免重定向所有流量,请不要按该redirect-gateway选项,因为这正是它所做的 - 它只是一条默认路由。

    如果删除该选项会破坏其他功能,并不一定意味着您需要该选项 - 相反,通常意味着缺少其他东西,而“重定向网关”选项仅仅弥补了缺失的部分。

  • 具体来说,您当前的服务器配置才不是将 172.31.0.0/16 路由推送到客户端 - 它仍然只在服务器端,并且所有这些都只起作用,因为“redirect-gateway”弥补了缺少特定路由的问题。您需要使用push "route ..."该路由将该路由部署到客户端。

  • 与此相关,如果您发现自己正在使用“拉取过滤器”来阻止客户端拉取不需要的东西,那么请更改服务器配置以首先不推送该东西。

相关内容