我家里有局域网。它位于 NAT 后面并在外部使用动态 IP 地址。在我的家庭 LAN 中,我使用 192.168.1.x IP 地址。
此外,我有一个 VPS,其 IP 为 185.xxx 地址。我现在想做的是使用OpenVPN在我的家庭局域网和VPS之间建立一条隧道,这样VPS就可以访问我家庭局域网中的共享文件。
我已经使用 OpenSSL 设置了 OpenVPN 和所有证书等。当我跑步时
openvpn --config server.conf
在 VPS 上和
openvpn --config client.conf
在我 LAN 中的 PC 上,建立了 VPN 连接,VPS 和 PC 都获得了具有 10.8.xx IP 地址的 TUN 设备。到目前为止,看来这两台计算机已连接,并且我没有看到任何错误消息。
然而,我不知道我该如何继续。
这是我的server.conf
:
server 10.8.0.0 255.255.255.0
verb 3
key /etc/openvpn/server/server.key
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
dh /etc/openvpn/server/dh.pem
keepalive 10 120
persist-key
persist-tun
comp-lzo
route 192.168.1.0 255.255.255.0
dhcp-option DNS 192.168.1.1
user nobody
group nobody
proto udp
port 1194
dev tun1194
status openvpn-status.log
这是我的client.conf
:
client
nobind
dev tun
redirect-gateway def1 bypass-dhcp
remote 185.x.x.x 1194 udp
comp-lzo yes
redirect-gateway def1
key /etc/openvpn/client.key
cert /etc/openvpn/client.crt
ca /etc/openvpn/ca.crt
我应该如何配置客户端和服务器,以便我可以将 VPS 上的流量发送到我的 LAN? (例如在VPS上挂载SMB/CIFS共享,例如192.168.1.2)
理想情况下,如果可能的话,VPN 连接将使用我家的路由器作为 DHCP 服务器。我尝试使用dhcp-option
,但没有效果。它似乎也没有将流量从 VPS 路由到我的 LAN,例如我无法ping 192.168.1.2
在我的 VPS 上执行操作(我希望这应该是可能的)。
另外,是否可以从内部再连接一台PC到VPS上运行的VPN服务器,并且第三台PC也可以访问我的家庭局域网?就像这样:
Some PC on the internet <---> VPS <---> VPN tunnel <---> Home LAN
答案1
要在子网之间建立路由,您需要通告这些子网。考虑使用该push "route 192.168.1.0 255.255.255.0"
选项。请参阅 OpenVPN 文档,特别是https://community.openvpn.net/openvpn/wiki/BridgingAndRouting。
站点到站点 OpenVPN 隧道(=带路由的点对点)上的客户端和服务器 OpenVPN tun 接口使用的 IP 地址正是您所声明的地址。
答案2
我取得了一点进步。在服务器上使用此配置
server 10.8.0.0 255.255.255.0
verb 3
key /etc/openvpn/server/server.key
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
dh /etc/openvpn/server/dh.pem
keepalive 10 120
persist-key
persist-tun
comp-lzo
route 192.168.1.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
push "redirect-gateway def1 bypass-dhcp"
user nobody
group nobody
proto udp
port 1194
dev tun1194
status openvpn-status.log
和
client
nobind
dev tun
redirect-gateway def1 bypass-dhcp
remote 185.x.x.x 1194 udp
comp-lzo yes
redirect-gateway def1
#iroute 192.168.1.0 255.255.255.0
key /etc/openvpn/client.key
cert /etc/openvpn/client.crt
ca /etc/openvpn/ca.crt
在客户端上,建立 OpenVPN 连接后我得到以下路由表:
服务器:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway.netcup. 0.0.0.0 UG 100 0 0 ens3
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun1194
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun1194
185.x.x.x 0.0.0.0 255.255.252.0 U 100 0 0 ens3
192.168.1.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun1194
客户:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
default gateway 0.0.0.0 UG 0 0 0 eth0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
link-local 0.0.0.0 255.255.0.0 U 1118 0 0 eth0
185.x.x.x gateway 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
但是,仍然无法ping 192.168.1.1
从服务器访问。当然我在客户端启用了IP转发
sysctl -w net/ipv4/ip_forward=1
我还尝试在客户端上配置 iptables:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE