因此,您遵循了我们的教程,该教程介绍了如何使用OpenVPN和Amazon EC2服务器设置自己的VPN服务器,并且运行良好。也就是说,直到它突然被阻塞为止。也许您重新启动了实例并获得了新的IP地址。再过几天它又能正常工作,然后被阻止。您的办公室,ISP或政府似乎正在积极阻止OpenVPN服务器。所以你会怎么做?
基本防火墙根据使用的端口和目标IP地址来阻止连接,但是更高级的防火墙使用深度包检查(DPI)和/或状态包检查(SPI)来区分不同类型的加密算法和VPN协议。这意味着他们可以检测到OpenVPN流量并对其进行标记,以便管理员可以阻止服务器.
可以通过以下三种方法解决此问题:模糊代理,SSL隧道和SSH隧道。在本教程中,我们将讨论最后一个。 SSH隧道将您已经加密的连接包装在另一层加密中,因此防火墙无法区分。这些方法中的每一种都应绕过由公司或像中国这样的严格审查政府设置的DPI和SPI防火墙.
SSH上的OpenVPN确实有一些缺点。首先是由于双重加密而导致性能下降。其次,当通过SSH隧道传输时,无法再检测到OpenVPN的指纹,但是某些防火墙也阻止了SSH流量。像Netflix这样的服务就是这种情况,它停止使用任何类型的加密代理,OpenVPN,SSH或其他方式。在这种情况下,我们建议您改为设置Obfsproxy,这会使加密的流量看起来是正常的且未加密。因此,Obfsproxy功能更强大,但设置和运行也更复杂.
不幸的是,据我们所知,Obfsproxy与OpenVPN结合目前仅在台式机上运行。 SSH隧道可以在Android或iOS移动设备上使用.
本教程假定您已经设置了可运行的OpenVPN服务器,并且可以使用OpenVPN GUI或OpenVPN Connect应用程序连接到该服务器。您还必须能够使用Mac上的终端或PC上的PuTTy SSH进入服务器。出于演示目的,我们将使用PuTTy。如果您尚未完成所有设置,请参阅我们之前的教程.
在PC上通过SSH设置OpenVPN
在上一教程中,我们讨论了如何设置一个简单的SSH代理,然后对其进行扩展以创建一个完整的VPN服务器。这种方法将两者结合起来,这意味着您应该已经拥有了所需的一切.
打开PuTTy并加载您的VPN服务器配置。在边栏中,导航到“连接” > SSH协议 > 隧道。确保D8080包含在列表中。如果不是,请在“源端口”中键入8080,然后选中“自动”和“动态”。然后点击添加。现在,您有一个通过端口8080运行的SSH代理。如果需要返回导航树的“会话”选项卡,则可以将其保存为单独的会话配置。.
单击打开,然后登录到您的服务器。请记住,在较新的Amazon Linux AMI上,用户名是“ ec2-user”.
导航到您的openvpn.conf文件,并使用以下命令检查内容
cd / etc / openvpn
猫openvpn.conf
这应该显示您的OpenVPN服务器配置文件的内容。它看起来应该像这样:
1194端口
原始TCP服务器
dev tun1
ifconfig 10.4.0.1 10.4.0.2
状态服务器-tcp.log
动词3
秘密ovpn.key
重要的是第二行设置为TCP,而不是UDP。如果需要更改,可以使用以下命令进行编辑:
须藤nano openvpn.conf
然后单击CTRL + O(字母“ o”,不为零)保存文件,然后单击CTRL + X退出编辑器.
客户端配置
在本地计算机上,导航到您的OpenVPN客户端配置文件。如果使用默认安装目录,则该目录为C:/ Program Files / OpenVPN / config.
从上一教程中创建现有OpenVPN配置文件的副本,或创建一个新副本。找到记事本或其他纯文本编辑器,然后右键单击以“以管理员身份运行”。打开或创建新的配置文件,该文件应如下所示:
原始TCP客户端
远程本地主机1194
1194端口
dev tun1
秘密ovpn.key
重定向网关def1
ifconfig 10.4.0.2 10.4.0.1
袜子代理重试
袜子代理127.0.0.1 8080
请注意,第二条“远程”行使用本地主机而不是OpenVPN服务器IP,最后还有两行将OpenVPN配置为使用SOCKS代理。其他一切都和以前一样.
将新的配置文件保存到OpenVPN目录的config文件夹中.
设置应用
最后一步是将您的应用程序配置为通过端口8080使用代理。这与上一教程中对基本SSH代理的操作类似。许多应用程序的设置中都有代理设置,有些甚至可以自动检测到。如果需要手动设置,则需要的三项信息是:
- 主持人:127.0.0.1
- 端口:8080
- 代理类型:SOCKS5(或SOCKS v5)
以下是Firefox和Chrome的说明:
在Firefox中:
- 转到工具 > 选件 > 高级 > 网络 > 连接 > 设定值 > 手动代理配置
- 将SOCKS主机设置为127.0.0.1,将端口设置为8080(或将隧道端口设置为PuTTy上的任何设置).
- 单击确定保存
在Chrome Proxy Switchy中
- 安装扩展程序后,应该会出现一个设置页面,或者单击Chrome右上角的图标,然后单击“选项”。.
- 随心所欲命名个人资料。在“手动配置”下,将SOCKS主机设置为127.0.0.1,将端口设置为8080(或在PuTTy中将隧道端口设置为的任何设置。.
- 点击保存,然后再次单击图标以选择您的代理配置文件.
现在,使用上面的配置,首先通过PuTTy连接到服务器,然后使用我们创建的新配置文件通过VPN连接.
您现在已通过SSH通过OpenVPN连接到Internet!
移动
我们将说明如何将您的OpenVPN + SSH隧道改编为Android,尽管iOS不应有太大不同.
在开始之前,有一些警告。首先,此方法仅适用于Web浏览。这是因为,与台式机不同,您不能只在库存的Android或iOS设备上随意打开端口。这意味着其他应用程序使用的端口将不会通过SSH代理定向。为了解决这个问题,您可以将设备启动或越狱,然后使用ProxyDroid或Cydia的Unix应用之类的应用来配置代理.
那是以后的教程。现在,让我们启动它并在带有Firefox的普通Android上运行。您需要安装以下应用:
- 适用于Android的OpenVPN(请注意:不是OpenVPN Connect,这对身份验证更加挑剔)
- ConnectBot或等效的SSH终端应用程序(JuiceSSH很好,但转发端口需要额外付费)
- 文件管理器,例如File Commander
- Firefox或其他可用来配置代理的浏览器
您还需要一些方法将文件从计算机传输到手机。 USB电缆很好。我使用了IBackup的同步文件夹.
在桌面上找到您上面创建的ovpn.key和.ovpn配置文件,然后将它们移至手机的内部存储或SD卡中。还要移动服务器主机提供的.pem密钥文件。它可能与用于通过PuTTy进行身份验证的.ppk文件位于同一位置。如果您丢失了它,则必须在Amazon EC2仪表板上或使用的任何服务器托管服务中创建另一个。.
(可选)您可以获取无需SSH即可用于连接的标准.ovpn配置文件。然后,您可以将VPN与所有应用程序一起使用,而不仅仅是浏览器,这对于解决问题很有用.
ConnectBot设置
在手机上运行ConnectBot。单击右上角的三个点,然后转到“管理公钥”。在下一页上再次单击点,然后单击导入。这将启动您安装的文件管理器。找到刚移到手机上的.pem文件,然后选择它。现在,它应该出现在公共密钥列表中,并带有红色锁。点按它,使其变为绿色。点击后退按钮可返回ConnectBot的主页.
在“ ssh”旁边的底部终端字段中,输入您的SSH详细信息。它看起来应该像这样:
ec2-user @:22
替换为您的OpenVPN服务器的IP地址。点击Enter键以SSH进入您的服务器。所有这些都应保存,因此您无需再次输入,但是将来您可能需要再次切换公钥.
成功建立连接后,再次点击三个点并断开连接。您的个人资料应保存在ConnectBot的主屏幕上。长按以打开上下文菜单,然后点击“编辑转发端口”。在下一页上,点击三个点并选择“添加转发端口”。
随心所欲命名。将类型设置为动态(SOCKS),并将源端口设置为8080(或OpenVPN配置文件的socks-proxy行中的任何内容)。点击“创建端口转发”.
ConnectBot已准备就绪,但我们暂时还无法连接。首先设置OpenVPN.
适用于Android的OpenVPN设置
运行适用于Android的OpenVPN.
单击右上角带有向下箭头的方形按钮,以导入配置文件。导航到您的.ovpn配置文件并选择它。在下一页上,点击“选择”按钮.
这次,导航至ovpn.key文件并选择它。点击右下角的黄色保存按钮.
现在,您的新个人资料应出现在应用程序主屏幕上的列表中.
连接之前,请仔细检查服务器防火墙。登录到AWS,选择实例,然后突出显示您的OpenVPN服务器。在“安全组”字段中,单击用于该实例的一个。右键单击它,然后选择“编辑入站规则”.
为端口22、1194和8080添加自定义TCP规则,根据您的个人配置进行必要的调整.
现在,该连接了。首先打开ConnectBot。点击我们刚刚创建的配置文件,以SSH进入您的服务器。确保已打开公钥,否则会出现密码错误。成功连接后,切换到OpenVPN应用。点击那里的个人资料进行连接.
在您连接时弹出的OpenVPN日志末尾,您应该会看到一条消息,提示“ CONNECTED,SUCCESS”.
请注意,由于我们使用的是与台式机相同的.pem和.key文件,因此您一次只能在一个设备上使用这些凭据。确保您没有先在桌面上连接。如果要同时在多个设备上连接,则需要为每个设备生成新的凭据(.key和.pem).
配置Firefox以使用代理
最后,我们需要配置Firefox以使用代理。移动设备上的Chrome和Safari没有代理配置选项,因此我们建议使用Firefox。您可以尝试在wi-fi设置中设置代理,但是每次您要在没有代理的情况下进行连接时,都必须对其进行更改.
在Firefox URL栏中,键入“ about:config”。在该页面的搜索栏中,键入“ network.proxy”。这将调出我们关注的所有领域。在指示的字段上输入以下设置:
- network.proxy.socks:127.0.0.1
- network.proxy.socks_port:8080(或您在OpenVPN配置和ConnectBot中设置的任何内容)
- network.proxy.type:1
这样可以通过OpenVPN和SSH路由Firefox的浏览器流量。您现在可以通过VPN通过移动设备从网上冲浪,而不必担心深度数据包检查!
如果您想通过不带OpenVPN的SSH代理进行连接,只需通过ConnectBot SSH进入您的服务器即可,不要与OpenVPN进行连接。相反,您可以将基本的非SSH .ovpn配置文件导入到OpenVPN应用中,并使用该SSH代理进行连接.
由CC BY 2.0许可的jo.sau的“隧道”
于OpenVPN的安全组。确保端口1194和8080已打开。如果没有,请添加它们.
现在,您可以单击新个人资料以连接到OpenVPN服务器。如果一切正常,您应该能够成功连接并访问互联网。但是,您需要配置浏览器以使用代理。
配置Firefox以使用代理
在Firefox中,单击右上角的三个水平线,然后选择“选项”。在左侧菜单中,选择“高级”选项卡,然后选择“网络”选项卡。在“连接”下,单击“设置”。
在“手动代理配置”下,将代理类型设置为“SOCKS v5”,将主机设置为“127.0.0.1”,将端口设置为“8080”。单击“OK”保存更改.
现在,您可以使用Firefox浏览器访问互联网,并且所有流量都将通过OpenVPN + SSH隧道进行传输。
总之,通过SSH隧道使用OpenVPN可以帮助您绕过DPI和SPI防火墙,以便在受限制的网络环境中访问互联网。虽然这种方法可能会导致性能下降,但它是一种可靠的解决方案,可以在台式机和移动设备上使用。