如何设置OpenVPN让VPN客户端访问服务器局域网内的所有服务器?

如何设置OpenVPN让VPN客户端访问服务器局域网内的所有服务器?

我的服务器 LAN IP 是 192.168.1.1,并且在 192.168.1.2 上有一个内联网 Web 服务器,OpenVPN 守护程序配置为向客户端提供 192.168.2.* 地址。

配置中有push "route 192.168.1.0 255.255.255.0"一行我希望允许 VPN 客户端访问整个 192.168.1.0 网络,但它们只能访问 192.168.1.1 - VPN 服务器本身。

我已尝试启用net.ipv4.ip_forward = 1/etc/sysctl.conf,但没有帮助。

有任何想法吗?

PS:服务器运行 Ubuntu 12.04。PPS
:OpenVPN 以 UDP 模式运行tun

答案1

确保 IP 转发已启用

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

此外,为了使路由推送正常工作,内部的服务器还需要知道到您的 OpenVPN 客户端 IP 地址的路由。因此,它们需要知道到 192.168.2.0/24 的路由

您很可能可以使用以下方法让 iptables 通过伪装进行路由

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

答案2

如果您的 LAN 网络确实是 192.168.1.0/24,那么您可能会遇到很多问题。因为大多数路由器都有该默认网络。因此,当您在访客网络上时,您的计算机可以从 192.168.1.0/24 网络获取 IP。因此,您无法访问远程网络,但可以访问访客网络。我建议为您的 LAN 和 VPN 选择另一个网络。例如,LAN 为 192.170.15.0/24,vpn 为 10.0.5.0/xx。xx 取决于有多少 vpn 客户端连接到 LAN。

这是我的 openvpn 的 fw 脚本

#!/bin/sh

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT

# Allow packets from private subnets
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT

# i have multiple vpn networks
# 192.123.123.0/24 = LAN
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.9.0.0/30 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.9.1.0/30 -o eth1 -d 192.123.123.39 -j MASQUERADE # to single server access only

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

相关内容