通过 VPN 连接到子网

通过 VPN 连接到子网

我的 VPN 设置如下:

########### internet  ############## internet  ############   LAN   ############
# macbook # --------> # VPN server #----------># PC A     # -------># PC B     #
#10.8.0.6 #           # 10.8.0.1   #           # 10.8.0.7 #         # 192.168..#
###########           ##############           ############         ############

现在我想用我的 MacBook 访问 PC A 本地 LAN 中的 PC B(A 在 VPN 网络中),我可以用我的 MacBook 访问 PC A,因此 VPN 可以工作,我只需要某种方式将 MacBook 的流量路由到 PC A(我猜)以到达 PC A LAN 中的 PC B,我无法将 PC B 添加到 VPN 网络,因为我没有(物理)访问权限。(我希望这不会太令人困惑)我该怎么做?VPN 服务器和 PC A 正在运行 Debian,

非常感谢您的任何建议:),抱歉我的英语不好

答案1

如果你可以修改 PC A 上的网络然后您可以为其提供多个 IP 地址。保留一个在 10.0.0.x 范围内的 IP 地址,以便您可以通过 VPN 服务器继续与 PC A 通信。在 192.168.xx 范围内为 NIC 添加第二个 IP。

您可能需要在 PC A 上添加一条路由,以指示它应使用该 IP/接口与 PC B 进行通信。无论是通过route add -net整个 192.168.xx 网络还是route add -host 192.168.a.b. netmask foo.bar.baz.foo(等等)通过单个特定主机。

现在您应该能够从 PC A 到 PC B 进行通信。

如果您被允许在 PC A 上启用路由,那么您也可以进行设置,以便您可以直接从 macbook 或 VPN 服务器访问 PC B。

您可以使用以下方式检查cat /proc/sys/net/ipv4/ip_forward或启用它sysctl -w net.ipv4.ip_forward=1


此外,macbook 和 VPN 服务器之间的第一个internet可能应该是LAN。10.xxx 范围到互联网的路由非常不传统。:)

答案2

您的设置尚未完全定义。我做出以下假设:

  • PC A已接入 VPN在 192.168.. 子网中。因此PC A可以正常访问PC B

不幸的是,没有提供本地子网PC A的确切地址。PC B


因为你无法控制PC B你必须创建一个转发端口打开PC A您想要访问 PC B 上的每个端口。

在 Debian 上,您应该使用 转发端口iptables。我在 OpenSUSE 机器上有一个类似的设置,它PC B通过 VPN 转发 RDP。这将在 上PC A

pc_b=192.168...
macbook=10.8.0.6

case "$1" in
'start')
        iptables -F FORWARD
        iptables -t nat -F
        iptables -P FORWARD DROP
        echo 1 > /proc/sys/net/ipv4/ip_forward

        iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

        # VPN FORWARD of the RDP port (3389)
        iptables -A FORWARD -p tcp -s $pc_b --sport 3389 -d $macbook -j ACCEPT
        iptables -A FORWARD -p icmp -s $pc_b -d $macbook -j ACCEPT
        iptables -A FORWARD -p tcp -d $pc_b --dport 3389 -s $macbook -j ACCEPT

        iptables -A FORWARD -j REJECT

        # RDP from VPN
        iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 3389 \
                -j DNAT --to-destination $pc_b
        ;;
'stop')
        iptables -F FORWARD
        iptables -t nat -F
        iptables -P FORWARD ACCEPT
        echo 0 > /proc/sys/net/ipv4/ip_forward
        ;;
'status')
        iptables -t nat -L PREROUTING
        ;;
esac

该脚本接受startstopstatus,并且可以在 rc.d 中用作PC A tun0VPN 接口上的运行级脚本。

这将禁止192.168..子网和 VPN 之间的任何流量,除了明确打开的端口(本例中为 3389)。您不必禁止所有其他转发,但我建议这样做。

这也会将对 的访问转发10.8.0.7:3389192.168..:3389


如果您不想使用端口转发,则必须以PC B某种方式更改路由。如果您无权访问PC B,则需要引导交通从默认网关PC B 到 VPN。一种可能性是将 VPN 的流量从默认网关路由到PC A

这仅在您在 MacBook 所在位置使用与PC A和之间使用的子网不同的子网时才有效PC B 如果您在 MacBook 上使用某种类型的路由器,那么您那里可能也有一个 192.168.. 子网。

对于此设置,您不需要使用以前的脚本。

你仍然需要

echo 1 > /proc/sys/net/ipv4/ip_forward

(与...一样sysctl -w net.ipv4.ipforward=1

如何设置路由取决于默认网关和您的 MacBook 上的操作系统。一般来说,它的工作原理如下:

在 MacBook 上(路由至PC B):

route add 192.168.. gw 10.8.0.7

这仅当 MacBook 上没有 192.168.. 本地子网时才有效!

在 的默认网关上PC B(通过 路由到 VPN PC A):

route add 10.8.0.6 gw 192.168..

当然,由于问题中没有给出PC A和的内部子网地址PC B,所以我也无法提供准确的路由信息​​。

相关内容