尝试让 OpenVPN 在内部网络上运行(不是服务器上的 NAT)

尝试让 OpenVPN 在内部网络上运行(不是服务器上的 NAT)

我不确定我能否很好地描述我的问题,所以如果有些地方描述不正确,请见谅。我在家里有一个 OpenVPN 服务器,我已经设置好,并且可以通过手机正常连接,手机的 IP 地址是静态的

我想在我的网络上设置 IP 控制(这样我就可以看到流量的来源,例如手机与笔记本电脑)

默认情况下,OpenVPN 会自行路由流量,因此一旦流量进入网络,它就会显示为 OpenVPN 服务器 IP

研究表明,你需要设置为 TAP 而不是 TUN,但 Android 默认不支持这一点。因此,我考虑进行 1:1 nat,为我的外部设备在我的网络上提供一个“内部”IP

例如我的手机,VPN 10.10.101.101,LAN 10.10.100.101

我有一个设置了 IP 范围的 VLAN 设置,并且在我的 VPN 服务器接口上设置了 100.101 IP。

我找到了一条 1:1 nat 规则,并将其设置在我的 VPN 服务器上,希望它能通过 VPN(10.10.101.101)接收来自我手机的流量并将其 nat 到 LAN IP 10.10.100.101,但这似乎没有起作用。

我在主路由器/防火墙 IPv4 上收到以下错误:martian source 157.240.8.13 from 10.10.101.101, on dev eth0 这让我认为它不是在进行 NAT,而是将其源 IP 作为 VPN IP 传递

所以现在我有点不知所措

我是否可以使用 OpenVPN 来做我想做的事情?我尝试过谷歌搜索,但似乎找不到我想要的东西

谢谢托马斯

配置:

服务器配置文件

port 443
proto udp
dev tun

ca ca.crt
cert crt.crt
key key.key 
tls-auth ta.key 0 
key-direction 0
dh dh2048.pem
cipher AES-256-CBC

server 10.10.101.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 192.168.99.40"

keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun

client-config-dir ccd

log         openvpn.log
log-append  openvpn.log
verb 3

客户端配置文件

client
dev tun
proto udp
remote VPN.Domain.com 443

resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
cipher AES-256-CBC

redirect-gateway def1
remote-cert-tls server

IP 表

iptables -vL -t filter
Chain INPUT (policy ACCEPT 4555 packets, 1080K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  tun+   any     anywhere             anywhere

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  197 12387 ACCEPT     all  --  tun+   any     anywhere             anywhere
    0     0 ACCEPT     all  --  tun+   eth1    anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth1   tun+    anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 819 packets, 124K bytes)
 pkts bytes target     prot opt in     out     source               destination


iptables -vL -t nat
Chain PREROUTING (policy ACCEPT 4547 packets, 602K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 NETMAP     all  --  any    any     anywhere             10.10.100.0/24      10.10.101.0/24

Chain INPUT (policy ACCEPT 66 packets, 11890 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5 packets, 334 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 83 packets, 5320 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 NETMAP     all  --  any    any     anywhere             10.10.101.0/24      10.10.100.0/24


iptables -vL -t mangle
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination


iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination


iptables -vL -t security
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

答案1

我想在我的网络上设置 IP 控制(这样我就可以看到流量的来源,例如手机与笔记本电脑)

默认情况下,OpenVPN 会自行路由流量,因此一旦流量进入网络,它就会显示为 OpenVPN 服务器 IP

您无需执行任何操作即可使来自 VPN 客户端的流量在 LAN 中/到主路由器中可区分。默认情况下,Linux(是的,它与 OpenVPN 无关,但与您的防火墙有关)不会对其转发的流量执行源 NAT(无论是否过载)。

研究表明,你需要设置为 TAP 而不是 TUN,但 Android 默认不支持这一点。因此,我考虑进行 1:1 nat,为我的外部设备在我的网络上提供一个“内部”IP

似乎这是一个误解。您认为如果客户端的 IP 位于 LAN 的“子网中”,则 LAN 中的“真实”主机将知道如何自动访问它们,但事实并非如此。VPN 客户端仍然是“远程”主机,因为它们无法通过第 2 层(即以太网帧交换)直接找到/访问,而需要通过第 3 层的 OpenVPN 服务器(即 IP 转发)访问。因此,即使您执行“1:1 NAT”,也无济于事(而且您似乎做错了,即使您应该可以考虑工作(因为我只看到目标 NAT,而没有看到源 NAT),因为它没有实现与 tap 相同的功能。

因此,据我所知,您真正需要的只是主路由器上的返回路由(即,将服务器设为 VPN 子网的网关),这是大多数典型 VPN 设置在您不希望 NAT 过载时所需要的( / SNATMASQUERADE。在我看来,您甚至不需要 tap。

编辑:基于“火星错误”正如您所看到的,我假设您的路由器仅对来自 LAN 子网的 Internet 流量进行 NAT 过载(但不对通过其中不对其执行 NAT 过载的主机转发的任何流量进行 NAT 过载)。因为您想避免双重 NAT(这样您就可以在主路由器上进行“IP 控制”,我想)。您必须通过某种方式让您的路由器也对来自 VPN 子网的流量进行 NAT 过载。如果无法“正确”配置它(例如具有源匹配的SNAT/ MASQUERADEiptables 规则),则您需要通过“扩展”LAN 子网以使其覆盖 VPN 子网来解决这个问题,同时将 DHCP 服务器配置为仅从原始范围(新 LAN 子网的上半部分)租用 IP。因此,在您的示例中,只需将 LAN 的子网掩码 / 前缀长度设置为255.255.254.0/ /23,然后将 DHCP 范围设置为10.10.100.2- 10.10.100.255。这样 VPN 客户端就可以使用10.10.101.0/24而不会与 LAN 主机冲突。您应该能够为其添加静态路由,因为它10.10.100.0/23也不会与 LAN 的子网路由()冲突,但仍然会覆盖它的一部分(以 VPN 服务器作为网关)。

答案2

回答我的问题,
我在 OpenVPN 路由到 eth0 时遇到了问题,尽管 eth1 已设置为默认

将我的管理接口移至 eth1,将我的 LAN 移至 eth0,现在流量运行正常

相关内容