Linux VPN 路由器的 IP 为 192.168.1.1/24 (eth0),在同一网络中还有其他具有固定 IP 的网络设备,即机器 A 192.168.1.20 和机器 B 192.168.1.21。要通过 VPN 访问这些设备,我连接到 VPN 服务器并输入路由器的 VPN IP 地址,只需更改最后一个八位字节即可。
例如,如果路由器的 VPN IP 是 10.1.1.1/24,那么要访问机器 AI 请转到 10.1.1.20,要访问机器 B 请转到 10.1.1.21...... 这一切都运行正常。
问题是:有时机器 C 和机器 D 也存在于网络上,但它们具有子网外的另一个(固定)IP,例如:192.168.2.50 和 192.168.2.51。
在 VPN 路由器上,我添加了一个虚拟网络接口 (eth0:0),IP 为 192.168.2.1...现在我可以直接使用 SSH 从路由器访问机器 C 和 D,但无法从机器 A 或 B 或通过 VPN 访问。
通过 VPN,我只被允许访问 IP 为 192.168.1.X 的设备。
我的目标(或第一个想法)是在路由器中将机器 C 和 D 的 IP 映射到另一个 IP,以使 VPN 服务器认为还有两个具有“可访问” IP 的设备......
例如,机器 C 的真实 IP 192.168.2.50 应该映射为 192.168.1.50.. 并且我希望从 VPN 以 10.1.1.50 的身份访问它。
这可能吗?或者也许有人有更好/更简单的想法?
2015年11月16日更新:
VPN 路由器有一个选项,您可以在其中添加启动脚本,在此部分我有以下内容:
#This part comes automatically
iptables -t nat -D PREROUTING -d '10.1.1.0/24' -i tun0 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -I PREROUTING -d '10.1.1.0/24' -i tun0 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o tun0 -j NETMAP --to '10.0.1.0/24'
iptables -t nat -I POSTROUTING -s '192.168.1.0/24' -o tun0 -j NETMAP --to '10.0.1.0/24'
#Start of manually entered data
ifconfig eth0:1 192.168.2.1
#Reach machine C
iptables -t nat -D PREROUTING -d '10.1.1.50' -i tun0 -j NETMAP --to '192.168.2.50'
iptables -t nat -I PREROUTING -d '10.1.1.50' -i tun0 -j NETMAP --to '192.168.2.50'
iptables -t nat -D POSTROUTING -s '192.168.2.50' -o tun0 -j NETMAP --to '10.1.1.50'
iptables -t nat -I POSTROUTING -s '192.168.2.50' -o tun0 -j NETMAP --to '10.1.1.50'
#Reach machine D
iptables -t nat -D PREROUTING -d '10.1.1.51' -i tun0 -j NETMAP --to '192.168.2.51'
iptables -t nat -I PREROUTING -d '10.1.1.51' -i tun0 -j NETMAP --to '192.168.2.51'
iptables -t nat -D POSTROUTING -s '192.168.2.51' -o tun0 -j NETMAP --to '10.1.1.51'
iptables -t nat -I POSTROUTING -s '192.168.2.51' -o tun0 -j NETMAP --to '10.1.1.51'
在自动生成的条目后添加手动条目,可以使用 VPN 访问机器 C 和机器 D。缺点很明显,如果我有 20 台机器,我需要一个很长的列表来添加 iptables。或者有更好的方法吗?
从 192.168.1.X 系列(例如机器 A 和机器 B)到 192.168.2.X 系列(例如机器 C 和机器 D)以及反之的直接通信仍然不可能。