我不确定我能否很好地描述我的问题,所以如果有些地方描述不正确,请见谅。我在家里有一个 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 过载时所需要的( / SNAT
)MASQUERADE
。在我看来,您甚至不需要 tap。
编辑:基于“火星错误”正如您所看到的,我假设您的路由器仅对来自 LAN 子网的 Internet 流量进行 NAT 过载(但不对通过其中不对其执行 NAT 过载的主机转发的任何流量进行 NAT 过载)。因为您想避免双重 NAT(这样您就可以在主路由器上进行“IP 控制”,我想)。您必须通过某种方式让您的路由器也对来自 VPN 子网的流量进行 NAT 过载。如果无法“正确”配置它(例如具有源匹配的SNAT
/ MASQUERADE
iptables 规则),则您需要通过“扩展”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,现在流量运行正常