本文是关于我如何在家庭提供者的NAT(无白色IP地址)后面启动VPN服务器的方法。 我将立即进行预订:
此实施的
性能直接取决于您的提供商以及路由器使用的NAT类型 。
因此,我需要从我的Android智能手机连接到我的家用计算机,两个设备都通过提供商NAT连接到Internet,再加上计算机通过还具有NAT连接的家用路由器连接。
出于多种原因,未考虑使用带有白色IP地址的租用VPS / VDS以及从提供商那里租用白色IP地址的经典方案。
根据
以前的文章的
经验,已经与STUN和NAT提供程序进行了几次实验。 我决定通过在运行OpenWRT固件的家用路由器上运行命令来进行一个小实验:
$ stun stun.sipnet.ru
得到了结果:
STUN客户端版本0.97
主:独立映射,独立过滤器,随机端口,将发夹
返回值为0x000002
直译:
独立映射-独立映射
独立过滤器-独立过滤器
随机端口-随机端口
将发夹-将有一个发夹
在PC上执行了类似的命令后,我得到了:
STUN客户端版本0.97
主:独立映射,端口依赖过滤器,随机端口,将发夹
返回值为0x000006
端口相关过滤器-端口相关过滤器
命令输出的差异表明家用路由器为从Internet广播数据包的过程做出了贡献,这一事实体现在以下事实:在计算机上执行命令:
stun stun.sipnet.ru -p 11111 -v
我得到了结果:
...
MappedAddress = XX.1XX.1X4.2XX:4398
...
此时,UDP会话打开了一段时间,如果在那一刻发送了UDP请求(例如:netcat XX.1XX.1X4.2XX 4398 -u),则该请求到达了本地路由器,并由运行在其上的TCPDump确认,但是该请求未到达计算机-IPtables将其作为NAT转换器放置在路由器上。

但是,UDP请求通过ISP NAT传递的事实给成功带来了希望。 由于路由器在我的管辖范围内,因此我通过将UDP / 11111端口重定向到计算机来解决此问题:
iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX
因此,我能够启动UDP会话并从Internet接收来自任何IP地址的请求。 此时,我启动了OpenVPN服务器(配置后),监听UDP / 11111端口,在智能手机上指示了外部IP地址和端口(XX.1XX.1X4.2XX:4398),并成功从智能手机连接到计算机。 但是在此实现中出现了一个问题,有必要以某种方式维护UDP会话,直到OpenVPN客户端连接到服务器为止,我不喜欢定期启动STUN客户端的选项-我不想浪费STUN服务器。
还提请注意条目“
将发夹-将有一个发夹 ”,此模式
发夹使局域网中的一台机器通过NAT可以在路由器的外部地址访问同一网络上的另一台机器。

结果,维护UDP会话的问题得以简单解决-我在与服务器相同的计算机上启动了客户端。
它像这样工作:
- 使用本地端口11111启动了STUN客户端
- 收到带有外部IP地址和端口XX.1XX.1X4.2XX的响应:4398
- 使用外部IP地址和端口发送数据以发送到智能手机上配置的邮件(可以进行任何其他服务)
- 在具有UDP / 11111端口侦听的计算机上启动了OpenVPN服务器
- 在计算机上启动XX.1XX.1X4.2XX:4398的OpenVPN客户端以进行连接
- 任何时候我都可以使用IP地址和端口(在我的情况下,IP地址没有更改)在智能手机上启动OpenVPN客户端以进行连接

因此,我有机会从智能手机连接到我的计算机。 此实现使您可以连接任何OpenVPN客户端。
练习
您将需要:
在编写了几个脚本,几个配置文件之后,生成了必要的证书(由于智能手机上的客户端仅使用证书),因此获得了OpenVPN服务器的常规实现。
计算机上的主要脚本
用于将数据发送到邮件的脚本:
服务器配置文件:
proto udp dev tun ca /home/vpn11-srv/ca.crt cert /home/vpn11-srv/server.crt key /home/vpn11-srv/server.key dh /home/vpn11-srv/dh2048.pem server 10.2.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt tls-server tls-auth /home/vpn11-srv/ta.key 0 tls-timeout 60 auth SHA256 cipher AES-256-CBC client-to-client keepalive 10 30 comp-lzo max-clients 10 user nobody group nogroup persist-key persist-tun log /var/log/vpn11-server.log verb 3 mute 20
客户端配置文件:
client dev tun proto udp ca "/home/vpn11-srv/ca.crt" cert "/home/vpn11-srv/client1.crt" key "/home/vpn11-srv/client1.key" tls-client tls-auth "/home/vpn11-srv/ta.key" 1 auth SHA256 cipher AES-256-CBC auth-nocache comp-lzo user nobody group nogroup persist-key persist-tun log /var/log/vpn11-clent.log verb 3 mute 20 ping 10 ping-exit 30
在
本文上执行了证书生成。
脚本运行:
以前使其可执行
在智能手机的侧面
安装适用
于Android的
OpenVPN应用程序后,复制配置文件,证书并进行设置,结果如下:
在撰写本文的过程中,我将配置从计算机转移到Raspberry Pi 3,并试图在LTE调制解调器上运行整个程序,但是没有用! 团队成绩
STUN客户端版本0.97
主:独立映射,端口依赖过滤器,随机端口,将发夹
返回值为0x000006
“
端口相关过滤器”的值不允许系统启动。
但是家庭提供程序没有任何问题,可以启动Raspberry Pi 3系统。
与网络摄像头一起使用,通过VLC
从网络摄像头创建RTSP流 $ cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{vcodec=x264,venc=x264{preset=ultrafast,profile=baseline,level=31},vb=2048,fps=12,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://10.2.0.1:8554/}' --no-sout-all --sout-keep
和智能手机上的VLC进行查看(rtsp流://10.2.0.1:8554 /),结果证明远距离视频监控系统还不错,您还可以举起Samba并交换文件,通过VPN路由流量,
还有更多...
结论
如实践所示,要组织VPN服务器,您无需使用要支付的外部IP地址以及租用的VPS / VDS就可以进行操作。 但这一切都取决于提供者。 当然,我想获得有关各种提供商和所用NAT类型的更多信息,但这只是开始...
感谢您的关注!