标签:iptables 06 04 filter 2021 转发 net 路由 内核
关于如何排查vpn服务器无法转发的问题
- iptables的规则未命中
- vpn服务器内核未开启路由转发功能
- 反向路由校验未通过
iptables规则
首先检查iptables规则是否写了转发。(比如将FORWARD链默认策略设置为DROP)之前的规则构建过程如下:
- 清空iptables
iptables -F
或对于nat表iptables -t nat -F
iptables -X
iptables -Z
- 对于默认的filter表,写上状态模块,对于已接收的数据包,接收其关联或已建立连接的响应包。(如果没有设置,那么只能接收数据包,是无法接收响应包的)
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
- 写入转发规则
iptables -A FORWARD -s source -d destination -i tun+ -j ACCEPT
令源地址(vpn分配虚拟ip池)到目的地址(155测试机)可以转发。数据包输入网络接口是tun+意思是匹配所有的tun网卡。-s后跟源地址,-d后跟目的地址,-i是进入的网卡。
- 设置nat表(可选,不知道有没有用,还没弄明白)
iptables -t nat -A POSTROUTING -s source -o eth0 -j MASQUERADE
-o是从这里出去的
- 在vpn配置文件中向客户端推送路由
push "route xx.xxx.xx.xxx 255.255.255.255"
这里用了32位少推点
内核未开启路由转发
- 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
(写入内存在内存中开启) - 永久开启(写入内核)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
加载(-p是–load)sysctl
用于在内核运行时修改内核参数(/proc/sys)。
linux反向路由校验
当linux的IP协议栈收到IP包时,找到路由,本机的包向上层转发,非本机的包会根据路由转发。为了防止非法的包被转发,linux在查找路由后还会调用fib_validate_source()
来检查来源的合法性,通过包的源地址来查找出的网络接口,比较包原始入接口是否和查到的出接口一致,如果不一致查询严格属性skb->dev
的rp_filter
为1时就drop掉包。
如果有两个网卡在一个LAN里,如果一个包从eth0进入但服务器从eth1发现网关,那么从eth1是出不去的, 就不通了. 反向路由检查要求从哪里来的才能回哪去.
关闭反向路由检查(根据自己的情况替换第二第三行的网卡名), rp_filter中为1,默认开启。改为0 就关闭了这个检查。
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
ref
Linux内核的 反向路由检查机制_changqing1234的专栏-CSDN博客_路由反向检查
标签:iptables,06,04,filter,2021,转发,net,路由,内核 来源: https://blog.csdn.net/Sindweller5530/article/details/115459173
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。