![无法在我的 Rails 应用中通过 OpenVPN 发送外发电子邮件](https://linux22.com/image/537111/%E6%97%A0%E6%B3%95%E5%9C%A8%E6%88%91%E7%9A%84%20Rails%20%E5%BA%94%E7%94%A8%E4%B8%AD%E9%80%9A%E8%BF%87%20OpenVPN%20%E5%8F%91%E9%80%81%E5%A4%96%E5%8F%91%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6.png)
我在运行 OpenVPN 的 EC2 实例上用 Rails 编写了一个公司内联网站点。我使用的 Rails 基本电子邮件配置与 Rails 指南中所述类似:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'baci.lindsaar.net',
:user_name => '<username>',
:password => '<password>',
:authentication => 'plain',
:enable_starttls_auto => true }
唯一真正的区别是它指向我们的 Microsoft Online 服务器而不是 Gmail。无论如何,如果我终止 OpenVPN 进程,邮件发送正常。显然这不是一个好的解决方案。我应该如何配置 OpenVPN 以允许发送电子邮件?
我是内联网网站的程序员,而不是配置 OpenVPN 的系统管理员,所以我有点不确定从哪里开始或检查什么。
答案1
这听起来像是push redirect-gateway
路由问题。
您可以设置 OpenVPN 的选项之一是强制客户端使用 OpenVPN 服务器作为其默认网关,其实际结果是来自客户端的所有互联网流量都必须穿越 OpenVPN 并从那里退出到互联网。
这意味着您的 VPN 客户端的互联网流量现在受到 OpenVPN 服务器与互联网通信方式的影响。
我特别注意到的是,OpenVPN 网络在内部使用私有网络,并且服务器直接在互联网上;但是服务器没有任何 NAT 规则来屏蔽客户端的源 IP。这意味着您发送到 Microsoft Online 的数据包的源 IP 是客户端的 OpenVPN IP 地址——这意味着 Microsoft Online 无法将应答数据包发回给您。
当你的 OpenVPN 客户端处于活动状态时,你可以使用 traceroute 检查这一点。运行以下命令:
traceroute -n smtp.gmail.com
...并查看下一跳 IP 地址。如果它是您的 OpenVPN 服务器,则您已push redirect-gateway
设置选项。
或者,如果您的 OpenVPN 服务器位于防火墙后面,请检查防火墙中是否存在明确阻止(或无法允许,取决于您的防火墙类型)连接到目标端口的规则。
您还可以尝试通过 telnet 连接到您想要访问的目标端口;在您的示例中:
telnet smtp.gmail.com 587
...有时,您收到的错误可以告诉您防火墙在处理您的连接尝试时执行了什么操作。