CentOS7下将OCServ用户子网流量路由至IPIP隧道网关的配置求助
CentOS7下将OCServ用户子网流量路由至IPIP隧道网关的配置求助
咱们一步步来解决你遇到的问题——OCServ客户端能成功连接拿到私网IP,但没法访问互联网,核心是要把192.168.8.0/24子网的流量正确导向IPIP隧道,同时做好路由、地址转换和转发权限的配置。
第一步:确认并开启IP转发
Linux默认关闭IP转发,这是路由私网流量的核心前提:
- 先检查当前状态:
如果输出是sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 0,说明未开启。 - 临时开启(重启后失效):
sysctl -w net.ipv4.ip_forward=1 - 永久生效(编辑配置文件):
打开/etc/sysctl.conf,添加或修改一行:
然后执行net.ipv4.ip_forward=1sysctl -p让配置立即生效。
第二步:添加策略路由规则,引导用户子网流量走IPIP隧道
我们需要让源为192.168.8.0/24的数据包优先使用IPIP隧道的路由:
- 创建专门的路由表(比如编号100),并设置该表的默认网关为IPIP隧道的10.10.10.1:
ip route add default via 10.10.10.1 dev ipip table 100 - 添加路由规则,让192.168.8.0/24子网的流量使用这个路由表:
ip rule add from 192.168.8.0/24 table 100 - 保存路由规则避免重启丢失:
- 把路由表配置写入
/etc/iproute2/rt_tables,添加一行:100 ipiptunnel - 创建
/etc/sysconfig/network-scripts/rule-ipip文件,内容:from 192.168.8.0/24 table ipiptunnel - 创建
/etc/sysconfig/network-scripts/route-ipip文件,内容:default via 10.10.10.1 dev ipip table ipiptunnel
- 把路由表配置写入
第三步:配置iptables的SNAT/地址转换
因为192.168.8.0/24是私网IP,通过IPIP隧道访问互联网时需要转换成隧道能识别的IP:
- 用MASQUERADE(适合隧道IP动态变化的情况):
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o ipip -j MASQUERADE - 如果隧道两端IP固定,也可以用SNAT(比如你的服务器在IPIP隧道内的IP是10.10.10.2):
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o ipip -j SNAT --to-source 10.10.10.2
第四步:确保iptables允许流量转发
需要放行用户子网和IPIP设备之间的双向转发流量:
iptables -A FORWARD -s 192.168.8.0/24 -o ipip -j ACCEPT iptables -A FORWARD -d 192.168.8.0/24 -i ipip -j ACCEPT
第五步:检查OCServ配置是否限制路由
打开OCServ的主配置文件(通常是/etc/ocserv/ocserv.conf),确认路由配置允许客户端访问所有地址:
找到route相关配置,确保有一行:
route = 0.0.0.0/0
如果有其他限制路由的配置,暂时注释掉,先测试基础连通性。
验证配置
- 在服务器上确认IPIP隧道连通:
ping 10.10.10.1 - 在服务器上检查路由规则是否生效:
输出应该显示走ip route get 8.8.8.8 from 192.168.8.5ipip设备,下一跳是10.10.10.1。 - 重启OCServ服务让配置生效:
systemctl restart ocserv - 用客户端重新连接,尝试访问互联网或ping 10.10.10.1,验证连通性。
备注:内容来源于stack exchange,提问作者Keyvan Rahimi
相关产品推荐
相关产品推荐

