参考链接:blog.csdn.net/liang_opera…
背景
在某个项目中需要使用的客户B公司所提供的vpn连接内网。但是该vpn软件对于arm64架构的服务器支持不太好,因此需要部署一台前置服务器(linux router)做流量转发。
分析
内部服务器可以将网关设置为前置服务器的内网ip地址(wlp1s0:192.168.0.41),通过下一跳找到前置服务器然后再通过tun0转发到B公司内网。
前置服务器需要提前登录B公司提供的vpn软件,并保证和其内网互通。
最好保证内部服务器和前置服务器在同一个网段,避免内部ip网段不同,配置转换规则的问题,浪费时间。
解决
在前置服务器上开启IP 转发功能
sudo vim /etc/sysctl.conf
#net.ipv4.ip_forward = 1 取消注释,表明开启转发
#保存后执行内核参数更新命令
sudo sysctl -p
在前置服务器上配置iptables流量转发规则
# 将从 192.168.0.0/24 网段发送到 172.25.201.149 的数据包的源地址转换为发出数据包的网络接口的 IP 地址,SNAT转换规则
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 172.25.201.149 -j MASQUERADE
# 允许从 192.168.0.0/24 网段发送到 172.25.201.0/24 网段的数据包通过 wlp1s0 接口进入,从 tun0 接口发出
sudo iptables -A FORWARD -i wlp1s0 -o tun0 -s 192.168.0.0/24 -d 172.25.201.0/24 -j ACCEPT
# 允许从 172.25.201.0/24 网段发送到 192.168.0.0/24 网段的数据包通过 tun0 接口进入,从 wlp1s0 接口发出
sudo iptables -A FORWARD -i tun0 -o wlp1s0 -s 172.25.201.0/24 -d 192.168.0.0/24 -j ACCEPT
内部服务器gateway配置前置服务器的内网ip,保证下一跳到前置服务器,接着可以从tun0出去
其他问题:
查看iptables规则
# 查看 nat 表中的规则
sudo iptables -t nat -L -v -n
# 查看 FORWARD 链的规则
sudo iptables -L FORWARD -v -n
没有效果
- 先检查有没有开启转发
- 清楚iptables中的规则,并设置默认策略是ACCEPT
# 删除 filter 表中的所有规则
sudo iptables -F
# 清空 nat 表中的所有规则
sudo iptables -t nat -F
# 设置 INPUT 链的默认策略是 ACCEPT
sudo iptables -P INPUT ACCEPT
# 设置 FORWARD 链的默认策略是 ACCEPT
sudo iptables -P FORWARD ACCEPT
# 设置 OUTPUT 链的默认策略是 ACCEPT
sudo iptables -P OUTPUT ACCEPT