openvpn 访问客户端后面的 LAN,来自其他 VPN 客户端的 nat 和动态 IP

openvpn 访问客户端后面的 LAN,来自其他 VPN 客户端的 nat 和动态 IP

我读过并尝试过很多指南,包括关于此的官方指南,但我仍然无法让它工作。设置如下:

(client1 LAN: 192.168.10.0/24
(OpenVPN client: client1, 192.168.10.101)
             |
             |
             v
       (NAT router,
        *dynamic* internet IP: 178.1.2.3)
             |
             |
     (...internet...)
             |
             |
             v
    (OpenVPN server,
     *static* IP:
     1.2.3.4)      <--- (...internet...)  <--- (OpenVPN client,
                                                *dynamic* internet IP:
                                                client2, 88.1.2.3)

我希望客户端 2 能够访问客户端 1 的所有网络。正如我在下面的编辑 #2 中所说,我只能通过在客户端 1 LAN 中的所有机器上设置静态路由才能使其正常工作(出于某种原因,NAT 路由器上的静态路由不太管用,请参阅下面的编辑 #2)。

所有机器都运行带有 OpenVPN 2.3.10 的 Ubuntu 16.04。NAT 路由器是 TP-Link MR200 以防万一,client1 运行 KVM 虚拟机服务器,而 OpenVPN 服务器运行 docker 容器。

服务器、客户端 1 和客户端 2 之间的隧道运行良好。例如,客户端 2 也可以 ping 192.168.10.101,但无法 ping 192.168.10.211。我为每个客户端都准备了专用证书,运行良好,并且我在 openvpn 服务器和客户端 1 上启用了 IP 转发。

这是服务器的配置:

# cat /etc/openvpn/graphyc.conf
server 10.8.0.0 255.255.255.0
verb 3
key server-key.pem
ca ca.pem
cert server-cert.pem
dh dh.pem
keepalive 10 120
persist-key
persist-tun
comp-lzo

user nobody
group nogroup

# dir "clients" is chown'ed to nobody:nogroup
client-config-dir clients

client-to-client
push "route 192.168.10.0 255.255.255.0"
route 192.168.10.0 255.255.255.0

proto udp
port 1194
dev tun

/etc/openvpn/client1服务器上的内容(静态 vpn 租约)

# cat /etc/openvpn/clients/client1
ifconfig-push 10.8.0.101 10.8.0.5
iroute 192.168.10.0 255.255.255.0

client1 的配置内容

# cat /etc/openvpn/client1.conf
client
remote 1.2.3.4 1194 udp
nobind
dev tun
comp-lzo yes
verb 3
explicit-exit-notify 5    
key /etc/openvpn/client1-key.pem
cert /etc/openvpn/client1-cert.pem
ca /etc/openvpn/ca.pem

client2 的配置内容

# cat /etc/openvpn/client2.conf
client
remote 1.2.3.4 1194 udp
nobind
dev tun
comp-lzo yes
verb 3
explicit-exit-notify 5    
key /etc/openvpn/client2-key.pem
cert /etc/openvpn/client2-cert.pem
ca /etc/openvpn/ca.pem

我可以从客户端 2 ping 192.168.10.101,但无法 ping 192.168.10.211。当尝试后者时,服务器会看到 ping 并将其路由到客户端 1 的路由器 178.1.2.3 的互联网 IP:

Sat Nov 18 11:48:29 2017 client2/88.1.2.3:48069 MULTI: Learn: 192.168.10.211 -> client1/178.1.2.3:52928

官方指南说我还应该在 NAT 路由器上添加一条路由。具体来说,它说:“如果运行 OpenVPN 的客户端计算机不是客户端 LAN 的网关,则客户端 LAN 的网关必须具有一条路由,该路由将所有可通过 VPN 访问的子网引导至 OpenVPN 客户端计算机“。

但是,我现在无法这样做,因为我无法访问路由器的 Web 界面,但我也不确定在 NAT 路由器上到底要添加什么路由(我不确定是否需要这样做,因为我不需要访问服务器后面的 LAN)。

我将非常感激我仍需要采取(或纠正)的一些具体步骤。

编辑:**

以下是服务器、客户端1和客户端2连接到OpenVPN服务器后的路由表。

服务器:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         1.1.1.1         0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun
10.8.0.2        *               255.255.255.255 UH    0      0        0 tun
localnet        *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
192.168.10.0    10.8.0.2        255.255.255.0   UG    0      0        0 tun

客户端1:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.10.1    0.0.0.0         UG    0      0        0 eno1
10.8.0.0        10.8.0.5        255.255.255.0   UG    0      0        0 tun
10.8.0.5        *               255.255.255.255 UH    0      0        0 tun
link-local      *               255.255.0.0     U     1000   0        0 eno1
192.168.10.0    *               255.255.255.0   U     0      0        0 eno1
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

客户端2:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         178.1.1.1       0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.5        255.255.255.0   UG    0      0        0 tun
10.8.0.5        *               255.255.255.255 UH    0      0        0 tun
88.1.2.0        *               255.255.255.0   U     0      0        0 eth0
192.168.10.0    10.8.0.5        255.255.255.0   UG    0      0        0 tun

编辑#2:

好吧,这对我来说很奇怪:我在 NAT 路由器上添加了一条静态路由,以便通过 192.168.10.101 路由所有发往 10.8.0.0/24 的数据包。然后我尝试从客户端 2 ping 192.168.10.211,但没有成功。然后我登录到 192.168.10.211 并在 10.8.0.6 上 ping 客户端 2,它显示:

# ping 10.8.0.6
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=63 time=83.5 ms
From 192.168.10.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.10.101)
64 bytes from 10.8.0.6: icmp_seq=2 ttl=63 time=75.4 ms
64 bytes from 10.8.0.6: icmp_seq=3 ttl=63 time=79.9 ms

哇哦!稍等一下...然后我回到客户端 2 并 ping 192.168.10.211,现在一切正常:

# ping 192.168.10.201
PING 192.168.10.201 (192.168.10.201) 56(84) bytes of data.
64 bytes from 192.168.10.201: icmp_seq=1 ttl=63 time=78.6 ms
64 bytes from 192.168.10.201: icmp_seq=2 ttl=63 time=77.5 ms
64 bytes from 192.168.10.201: icmp_seq=3 ttl=63 time=75.1 ms

看起来 NAT 路由器不仅仅路由 ping 回复,可能是因为它从未看到转发 ping 数据包——我试图查看它是否具有可以禁用的状态防火墙,但没有。

然后,我进入另一台机器 192.168.10.207,并通过 192.168.10.101 在其自身上专门为 10.8.0.0/24 创建了一条静态路由(覆盖 NAT 路由器):

route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.10.101

然后从客户端 2 ping 192.168.10.207 就可以正常工作。

有没有办法避免在客户端 1 LAN 中的每台本地计算机上创建静态规则?NAT 路由器上的规则是否应该起作用,但由于某种原因却不起作用?

答案1

不要忘记将客户端 1 配置为网关(数据包转发器)。您可以使用以下命令验证这一点

# sysctl  net.ipv4.ip_forward

其值应为 1。如果没有,请配置它

# sysctl -w net.ipv4.ip_forward=1

您还可以通过检查/更改 /proc/sys/net/ipv4/ip_forward 来访问此值

答案2

找到接口

sudo ip route | grep default

default via 192.168.2.1 dev eth0

假面舞会

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

保存 iptables 规则

sudo apt-get install iptables-persistent -y

IP 转发

vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p

相关内容