我有一台由 OpenVPN 创建的带有 2 个真实 NIC 和 1 个虚拟 NIC(tun0)的服务器。
eth0 is LAN - IP 192.168.2.1
eth1 is Internet - IP is public internet IP
tun0 is created by openvpn
我需要的是,通过 eth1 连接到 VPN 服务器的客户端也能访问 eth0 网络,例如,能够连接到 192.168.2.21
这在过去一直有效,直到我重新启动服务器并且路由信息被重置 :/ 我几年前配置过这个,但忘记了如何操作。
路由表现在如下所示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default public gw 0.0.0.0 UG 0 0 0 eth1
public ip * 255.255.255.0 U 0 0 0 eth1
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
192.168.8.0 192.168.8.2 255.255.255.0 UG 0 0 0 tun0
192.168.8.2 * 255.255.255.255 UH 0 0 0 tun0
当我启动 OpenVPN 时,它会尝试添加路由
Tue Oct 11 19:29:58 2016 /sbin/ip route add 192.168.2.0/24 via 192.168.8.2
RTNETLINK answers: File exists
Tue Oct 11 19:29:58 2016 ERROR: Linux route add command failed: external program exited with error status: 2
但是这似乎是不可能的,因为它已经存在了。当我删除此路由时,openVPN 成功添加,但服务器不再可能访问 192.168.2.0/24 网络。
我怎样才能让它工作?
编辑:是的,我已启用 IPv4 和 IPv6 转发
答案1
您需要在 sysctl 中设置 ip_forward,并在 iptables 中的 FORWARD 表中添加一行接受行(通常默认为 ACCEPT)
http://www.ducea.com/2006/08/01/how-to-enable-ip-forwarding-in-linux/
答案2
一、必要路线:
192.168.2.0/24
VPN 客户端需要通过 VPN 网关(可能位于192.168.8.1
虚拟网络内部)路由到192.168.2.0/24
需要路由的设备192.168.8.0/24
——因为您的 VPN 服务器似乎位于默认网关上,所以不需要额外的配置。
然后是配置。具体情况取决于拓扑(net30/p2p 或子网),但一般是这样的:
topology net30
server 192.168.8.0 255.255.255.0
push "route 192.168.2.0 255.255.255.0"
我在这里省略了所有不相关(但仍然是必需的)的选项。但请注意,只会route
推送给客户端。不得在服务器上设置。
由于客户端通过推送接收所有必要的设置,因此不需要特殊配置。