问题描述

按照CentOS7 下搭建简易的L2TP/IPSec 服务搭建好L2TP/IPSec服务后,发现一个问题。
该入口机器上还跑着一些测试服务,有些测试服务是绑定的本机的loopback接口的,只对本机提供服务的。

本机上有一些另外的java服务,使用localhost地址访问这些服务时,发现请求会被解析为使用机器的外网地址来访问这些内网服务,导致java服务出错。
没法一眼看出问题,因此只能通过逐步停到服务的方式,来查看到底是当时搭建L2TP/IPSec的过程中,哪个设置导致了这个问题。

问题调查

依次停掉ipsec,xl2tpd服务,问题依然存在。
移除firewalld的masquerade设置后,java访问的问题就好了。

问题解决

感觉是localhost的loopback接口被配置了masquerade导致的问题,便想着有没有什么办法可以将loopback排除在masquerade配置以外,网上一通搜索,找到了一些类似问题,但似乎没有正确的解决办法。

最终自己想的解决办法如下:

  • 停止全局的masquerade配置
  • 将服务器上涉及到需要转发服务的IP端添加masquerade配置

最后试验下来,可以解决问题,最终修改命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 去掉全局混淆
sudo firewall-cmd --permanent --remove-masquerade
# 添加vpn内部网段,公司内部网段和公网网段IP的masquerade
## 添加vpn内部网段的masquerade
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.18.0/24 masquerade'
## 添加公司内部网段的masquerade
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=INTERNAL_IP_BLOCK/INTERNAL_IP_MASK masquerade'
## 添加服务器出口公网IP地址的masquerade
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=PUBLIC_IP/32 masquerade'
# 重新load firewalld
sudo firewall-cmd --reload
# 查看配置
sudo firewall-cmd --list-all

Reference

留言