所以我的最终目标是利用OpenVPN连接到远程IP摄像头。 我之所以selectOpenVPN,就是为了克服运营商级别的NAT,它阻止我做端口转发,并且在每个月都没有为这个特权付钱的情况下拥有一个静态IP。
所以下面是什么拓扑看起来像现在我可以从站点B和C站点A局域网(192.168.1.0)ping设备,这很好,certificateVPN正在工作。
但是我无法从网站A或站点B ping站点B(192.168.2.0)上的IP摄像机,这是我的最终目标。
我仍然不是100%确定我的configuration是正确的,或者如果我失去了一些东西。
在OpenVPN服务器(Debian 8)和Raspberry Pi上启用net.ipv4.ip_forward = 1。
我正在考虑的另一件事是我需要将IP摄像机默认网关设置为树莓派的IP?
拓扑结构:
服务器configuration
port 1194 proto udp dev tun topology subnet mode server tls-server server 10.8.0.0 255.255.255.0 push "dhcp-option DNS 8.8.8.8" client-config-dir ccd client-to-client route 192.168.2.0 255.255.255.0 10.8.0.3 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dh2048.pem keepalive 10 120 comp-lzo user nobody group nogroup daemon tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher AES-128-CBC comp-lzo persist-key persist-tun status /var/log/openvpn-status.log 20 log /var/log/openvpn.log verb 3
的/ etc / openvpn下/ CCD / flexo_client
push "route 192.168.1.0 255.255.255.0 10.8.0.1" iroute 192.168.2.0 255.255.255.0[/oconf]
客户端configuration
client dev tun proto udp remote xxxx 1194 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ns-cert-type server key-direction 1 cipher AES-128-CBC comp-lzo verb 1 mute 20 topology subnet ca - XML cert - XML key -XML tls-auth - XML
OpenVPN服务器上的路由表 – 站点A.
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 10.8.0.3 255.255.255.0 UG 0 0 0 tun0
树莓派路由表 – 网站B.
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.1 0.0.0.0 UG 303 0 0 wlan0 10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 192.168.2.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
编辑:
路由器上的静态路由(192.168.1.254) – 站点A.
Destination Gateway Genmask 192.168.2.0 192.168.1.143 255.255.255.0 10.8.0.0 192.168.1.143 255.255.255.0
我正在考虑的另一件事是我需要将IP摄像机默认网关设置为树莓派的IP?
是。 只有树莓派知道在哪里发送针对VPN的stream量。
另一个select是在Raspberry Pi上使用SNAT / MASQUERADE进行iptables设置,因此来自VPNnetworking的每个连接都将具有设置为Raspberry Pi IP的源IP。
将IP摄像机的默认网关设置为Raspberry Pi的IP,应该至less可以从vpn子网访问它(作为最后的解决scheme,如果您无法在路由器上定义路由)。 作为一种替代方法,如果可能的话,也可以从下面添加路由(站点B)到IP摄像机。
从networking的angular度来看,将路由添加到路由器的路由表会更清洁,这将使整个networking可以互相访问,而不仅仅是IP摄像机。
只要确定(它发生在我身上),请检查您在Debian服务器或Raspberry Pi上没有任何冲突的防火墙规则。
我已经testing了你的configuration,它应该工作,如果你添加这些路线:
将路由添加到站点B上的路由器
Destination Gateway Genmask 192.168.1.0 192.168.2.254 255.255.255.0 10.8.0.0 192.168.2.254 255.255.255.0 (optional)
只有在openvpn服务器上的任何其他服务需要到达站点B上的客户端或站点B上的客户端需要通过10.8.0.1 IP直接到达这些服务时,才需要第二个路由。
将路由添加到站点A上的路由器
Destination Gateway Genmask 192.168.2.0 192.168.1.143 255.255.255.0 10.8.0.0 192.168.1.143 255.255.255.0 (optional)
只有在Raspberry Pi上的其他服务需要到达站点A上的客户端或站点A上的客户端需要通过10.8.0.3 IP直接到达这些服务时,才需要第二个路由。
我无法完全testing站点A上的路由,因为我的openvpn服务器在路由器机器上运行。
说明:当IP摄像机(或站点B上的任何其他客户端)从openvpn子网或站点A子网获取数据包时,它没有到这些子网的路由,并将响应路由到其默认网关(路由器站点B )。 这个网关(如果知道这些路由的话)将数据包路由到下一个“网关”(树莓派)。
将一个固定IP推送到您的Raspberry Pi ,通过/etc/openvpn/ccd/flexo_client添加到/etc/openvpn/ccd/flexo_client文件(假设flexo_client是您的Pi的证书CN名称):
ifconfig-push 10.8.0.3 255.255.255.0
否则,如果您的Pi获得不同的IP地址,您可能会松动连接,因为您的路线不再正确。
下面是你的openvpnconfiguration的一些额外的提示,但是它们不应该对你的问题有任何影响。
在服务器configuration指令
mode server tls-server
并不是必需的,因为它们被server 10.8.0.0 255.255.255.0指令所隐含,并且展开如下(参见手册页):
mode server tls-server push "topology subnet" ifconfig 10.8.0.1 255.255.255.0 ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 push "route-gateway 10.8.0.1"
而且除非你确实需要,否则不应该要求使用指令push "dhcp-option DNS 8.8.8.8" ,因为连接到你的openvpn服务器的客户端应该从他们的DHCP服务器获得它们的DNS选项。 它也只对windows客户端有影响,在非windows客户端上它将被保存在一个环境variables中,以便在一个up脚本中可选用。
daemon指令也不是必需的(纠正我,如果我错了),因为它会导致所有的消息和错误输出发送到系统日志设施,这是没有效果的log指令取代它。 详细信息请参阅联机帮助页。
在客户端configuration中replace该指令
ns-cert-type server
通过
remote-cert-tls server
如果可能的话,因为它是一个不build议使用的行为,并且Easy-RSA 3没有启用默认行为,除非在与CA签署证书之前启用“Netscape”扩展。 请参阅openvpn wiki页面