OpenVPN 连接(macOS 上类似 Linux 的自制软件包)到我的办公室运行正常,但是它会阻止来自我的外部 IP 地址的传入 HTTP(S) 流量;但是,当我关闭 OpenVPN 时,我可以从外部访问我的计算机,否则它会被阻止。
如何配置 OpenVPN 以允许通过端口 80 和 443 进行传入连接,就好像没有 VPN 一样?
- 客户端配置:
client dev tun proto udp remote my-server-1 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
- 服务器配置
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 tls-auth ta.key 0 cipher AES-256-CBC persist-key persist-tun status openvpn-status.log verb 3 explicit-exit-notify 1
- 没有使用VPN时的输出
netstat -rn
:Internet: Destination Gateway Flags Netif Expire default 192.168.0.254 UGScg en0 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 169.254 link#6 UCS en0 ! 192.168.0 link#6 UCS en0 ! 192.168.0.187/32 link#6 UCS en0 ! # my macbook 192.168.0.254/32 link#6 UCS en0 ! # router 192.168.0.254 0:1e:e5:6d:91:fb UHLWIir en0 1195 192.168.0.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 192.168.56 link#17 UC vboxnet0 ! 192.168.56.255 ff:ff:ff:ff:ff:ff UHLWbI vboxnet0 ! 224.0.0/4 link#6 UmCS en0 ! 224.0.0.251 1:0:5e:0:0:fb UHmLWI en0 255.255.255.255/32 link#6 UCS en0 ! 255.255.255.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
- 使用VPN的输出
netstat -rn
:(utun3
是 VPN 记录)Internet: Destination Gateway Flags Netif Expire 0/1 10.8.0.5 UGScg utun3 default 192.168.0.254 UGScg en0 10.8/24 10.8.0.5 UGSc utun3 10.8.0.1/32 10.8.0.5 UGSc utun3 10.8.0.5 10.8.0.6 UHr utun3 127 127.0.0.1 UCS lo0 127.0.0.1 127.0.0.1 UH lo0 128.0/1 10.8.0.5 UGSc utun3 169.254 link#6 UCS en0 ! 192.168.0 link#6 UCS en0 ! 192.168.0.187/32 link#6 UCS en0 ! # my macbook 192.168.0.254/32 link#6 UCS en0 ! # router 192.168.0.254 0:1e:e5:6d:91:fb UHLWIir en0 1162 192.168.0.255 ff:ff:ff:ff:ff:ff UHLWbI en0 ! 192.168.56 link#17 UC vboxnet0 ! 192.168.56.255 ff:ff:ff:ff:ff:ff UHLWbI vboxnet0 ! <VPN IP>/32 192.168.0.254 UGSc en0 # VPN server public IP 224.0.0/4 link#6 UmCS en0 ! 224.0.0.251 1:0:5e:0:0:fb UHmLWI en0 255.255.255.255/32 link#6 UCS en0 ! 255.255.255.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
答案1
这是一个路由问题,不幸的是,我担心可能没有一个简单而令人满意的答案。
普通 IP 路由只关心数据包的目的地,而不关心其来源。在开放的互联网中,非对称路由很常见,而且不一定是个问题,但当涉及到 NAT、防火墙、入口过滤等时,它可能会成为一个大问题。
如果没有 VPN,客户端会将数据包发送到您网络的 NAT 路由器,该路由器会修改目标地址并将其发送到您的计算机。然后,您的计算机会生成回复,在其路由表中查找目标地址,并通过您网络的 NAT 路由器将其发送回去,该路由器执行反向转换并将数据包放回互联网,然后将其传递给客户端。
当你启动 VPN 时,你的默认路由将更改为指向 VPN,这意味着你发起的互联网连接将通过 VPN,但它还意味着您从互联网收到的连接请求的回复将通过 VPN 进行。
这些回复几乎肯定不会以可用形式传递给客户端。由于返回数据包不会通过执行正向转换的 NAT,因此反向转换将无法正确执行。响应数据包可能会被过滤器丢弃,可能会在完全没有反向转换的情况下转发给客户端,或者可能会在转换不正确的情况下转发给客户端。最终,客户端要么根本收不到数据包,要么收到的数据包带有错误的源地址,无法将其与连接尝试匹配,无论哪种情况,建立连接的尝试都会失败。