在这种情况下我需要帮助:
我的 openvpn 服务器上有一个 tap0 接口,ip 为 10.22.8.1
我的 eth0 接口是 192.168.1.155
路由表:
192.168.1.0-0.0.0.0-255.255.255.0-eth0
10.22.8.0-10.22.8.1-255.255.255.0-tap0
0.0.0.0-192.168.1.10-0.0.0.0-eth0
通过以下规则,我可以从我的局域网 ping 到 vpn 客户端:
iptables -v -t nat -A PREROUTING -i eth0 -d 192.168.10.0/24 -j NETMAP --to 10.22.8.0/24
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
我在 lan 客户端中有一个到我的 vpn 服务器的路由 192.168.10.0。Tcpdump 显示数据包从 eth0 重定向到 tap0,并且 netmap 正常工作。
但当我尝试相反的操作时,我无法从 vpn 客户端 ping 通我的局域网
iptables -v -t nat -A PREROUTING -i tap0 -d 10.22.8.0/24 -j NETMAP --to 192.168.1.0/24
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
tcpdump 显示数据包到达 tap0,但未到达 eth0。这就像 netmap 规则不起作用一样。
你能帮帮我吗?我做错了什么?
答案1
你这样做是错的。
第一 - 使用第 3 层连接而不是第 2 层进行 VPN。节省流量。
第二步 - 使用 brouting 来完成代理 arp 并将本地子网的 ip 地址分配给 vpn 客户端 - 因此它们看起来就像是本地的
第三步 - 或者使用路由并将路由设置为 192.168.1.0/network 中所有系统上的 10.22.8/24 子网中的客户端或者只需使用 vpn 系统作为默认网关即可避免路由问题......
使用 brouting:
- 在 Linux 路由器上启用 proxy_arp: echo 1 > /proc/sys/net/ipv4/conf/proxy_arp
- 如果没有自动添加子网路由到 eth0
从openvpn将本地子网的一个子网的路由添加到tun设备。
假设我们将使用 vpn 上主机的最后 16 个 IP 地址(192.168.1.240 - 192.168.1.255),这意味着我们有一个 28 位子网 192.168.1.240/28。创建 tun 设备静态(openvpn --mktun),然后将 vpn 子网的路由添加到设备 ip route add 192.168.1.240/28 dev tun0
在此之后,在启用 ip 转发和代理 arp 后,linux 系统将“broute”所有来自本地客户端的请求到 vpn 端的客户端,反之亦然。
并且您拥有一个第 3 层 vpn(速度更快、流量更少),具有第 2 层连接性并且可以完全透明地访问所有系统。
过滤和其他一切都可以通过 iptables 完成。
韩国,
格罗米特
答案2
你好,非常感谢你的帮助。最后我决定遵循第三点。
我的公司局域网中的客户端配置了双 IP。
正常的 192.168.1.X 和 vpn 的 10.22.8.X
VPN 客户端在两个网络中都有双 IP:
接口
inet 192.168.1.31/24 brd 192.168.1.255 范围全局 eth1
inet 10.22.8.243/24 范围全局 eth1
路由表
10.22.8.240 - 10.22.8.243 - 255.255.255.240 - UG - eth1
10.22.8.0-*-255.255.255.0-U-eth1
服务器有可用的proxy_arp、arp_accept和ip_forward。目前运行正常。
我非常感谢你的帮助,Gromit。