0.遇见问题
最近在我服务器上使用openvpn搭建了云免服务(什么是云免?这里不方便说,可自己或私聊我)使用了HTTP转接的方法。(具体原理不方便说)
搭建教程:点我 (手动狗头)
但是出现了一个问题,HTTP转发程序由于里面写死了,只能将8080端口的流量转发到443端口,正好是openvpn的端口(原因是这几个端口不容易被封)
众所周知,HTTPS的端口就是443,和openvpn的端口重复了,这就会导致两者只能运行一个,这怎么可以,于是我想到了一个办法:
- 端口转发
1.解决问题
- 主要思路:我们可以将nginx的443端口修改成别的端口,然后使用iptables将外部流量443端口的流量转发到我们修改的端口
首先我们设置我们nginx配置文件让其监听其他端口
配置文件在:/usr/local/nginx/conf/vhost/yuaneuro.cn.conf
将这里随便改一个端口然后重启nginx,这时我们的nginx的https就会监听你修改的端口。
然后我们使用iptables进行端口转发
关于iptables的详细使用方法请看我之前的文章
刚开始我是这样配置的:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 1024
(将所有流量从1024端口都转发到443端口)
nginx和openvpn虽然不冲突了,但是使用openvpn连接时只能访问网站,原因出在了吧所有流量都进行了转发,而我们要转发的仅仅时外部访问网站的流量,而不是本地的流量
所以修改为:
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp --dport 443 -j REDIRECT --to-port 1024
(只将外部流量从1024端口都转发到443端口)
-d后的参数时本地网卡的ip,可更具实际调整
这样问题完美解决!