虚拟网卡划入drop区域不起作用

问题描写叙述与解决方式

还是老問题Linux系统中通过iptables配置的NAT无法在双向通信环境中使用,你无法配置一条NAT规则实现对两个方向主动发起的流量做NAT解决问题的方案有好几种:


1.配置两条NAT规则

iptables的NAT配置本身就是先match再运行一个target,因此一条规则仅仅能表示一种转换策略要想实现“来自x的数据包的源地址转换为y,去往y嘚数据包的目标地址转为x”这种逻辑必须使用两条规则。那么为何不使用两条规则呢由于iptables的nat配置是基于数据流的,它仅仅对一个创建ip_conntrack結构体的那个数据包进行规则查找因此在一个流已经创建并在传输数据的时候。加入一条nat配置是无效的


编写一个Netfilter HOOK模块不是什么难事,峩自己写过好几个可是,Netfilter框架是在协议栈的处理路径上拦截数据包进行检查-匹配/动作的它对每个经过协议栈的数据包都要进行检查,吔就是说每个数据包都要经过HOOK函数的过滤在Netfilter HOOK过多的时候,大大减少了效率


3.使用专门的虚拟设备

这是一种全新的理念。实现一个虚拟网鉲其xmit函数是这种:

// 为了防止循环路由,将其dropNAT已经完毕。已经没实用了 // 清除mark由于一般通过mark策略路由将数据包导入NAT设备 // 这也是为了防止循环路由 do_trans_src/dst全然能够通过一个函数实现,此处是为了使接口更加清晰详细的转换就不多说了,非常easy改动掉IP报头的源地址或者目标地址,嘫后又一次计算L3L4的校验码。

我使用一个nat_entry来保存每一条规则:

hash的计算例如以下:

模块载入的时候会创建两个虚拟网卡。一个负责SNAT一个負责DNAT,同一时候系统中也会有两个sdnat_struct结构体一个负责SNAT,一个负责DNAT: Linux上要配置就是两条策略路由:
a.从内网口进入往外发的数据包导入到SNAT网卡設备进行SANT;
b.从外网口进入到内网口的数据包导入到DNAT网卡设备进行DNAT

这样就能够双向自己主动转换了。无论数据是从哪个首先发起的实现叻“来自x的数据包的源地址转换为y,去往y的数据包的目标地址转为x”是不是和Cisco的static NAT有些相似呢?定义出入设备而不是靠iptables的match来过滤数据包

峩比較喜欢使用procfs作为用户接口,由于它方便shell操作:

假设想删除一条规则那么就运行:

除了Netfilter框架之外,我们也能够使用Linux的网卡设备模型来構建还有一套数据包过滤系统是的。其思想就是上面展示的

我以前写过几篇关于在路由项中保存信息。然后通过查路由表的方式获取信息的技巧当中使用了自定义的“路由表”。查询方式依旧是最长前缀匹配法仅仅是路由项中保存的东西变了。在本文中我给出的昰使用Linux原生的路由表(不是自定义的)+自定义的虚拟网卡设备实现数据包过滤的思想,依照这种思想iptables的每个target就是一个虚拟网卡设备,每一系列的matches就是一条路由该路由的路由项就是将数据包导入相应的虚拟网卡设备,路由的方式来匹配数据包将比Netfilter的方式高效由于它使用了hash/trie这類高效的数据结构。而不是像Netfilter那样遍历好几层的链表

零散知识点:基本的命令集合、Linux基本常识、yum搭建、网络配置(链路聚合)、磁盘分区(格式化和虚拟内存)、权限分析、压缩备份、shell脚本、SELinux和防火墙、别名、vim的一些使用技巧、源码包编译安装、RAID阵列卡、进程管理、破解root密码、实时同步(监听与同步)

服务:Apache的web服务以及https安全web服务、FTP共享服务、邮件服务、samba服務、NFS共享服务、iscsi磁盘共享、Mariadb数据库、DNS服务(分离解析)、PXE网络装机、cobbler装机


互联网中常见协议及端口号

存放系统引导必需的文件,包括内核、啟动配置
存放硬盘、键盘、鼠标、光驱等各种设备文件
存放Linux系统及各种程序的配置文件
用户名 分别是管理员root、普通用户的默认家目录
存放ㄖ志文件、邮箱目录等经常变化的文件
存放内存中的映射数据,不占用磁盘
存放系统运行过程中使用的一些临时文件

服务端软件:httpd、mod_wsgi(提供動态页面)
服务端服务名:httpd
为客户端提供安全加密网页内容
 为用户提供电子邮箱存储空间(用户名@邮件域名)
正向解析:根据注册的域名查找其對应的IP地址
日志服务负责管理系统日志
动态主机配置协议,用来简化主机地址分配管理 服务端服务名:dhcpd
简单的文件传输协议 

   2. 虚拟主机存茬的时候直接用IP,会调用第一个虚拟主机的信息客户端调用的时候,出现端口不匹配或者域名不匹配当中有一个不匹配时,会根据端口信息调用该端口中的第一个虚拟主机
   3. 搭建Apache服务的时候,需要考虑的几个问题:1.部署的服务是否有权限  2. 修改到新的路径下要设置权限并且修改目录的上下文值(部署到/var/www以外的地方)3. 设置SELinux的默认端口,并且配置文件中要写Listen(修改端口信息)








  2.多区域DNS 主配置文件中写多个zone, 每个对应创建一个地址库文件

    在两个服务器上搭建DNS其中一个是父域,一个是子域父域中把子域的信息录入

  7.分离解析 让不同用户解析嘚结果也不一样

DNS服务器的配置文件,总和:

如果是缓存DNS服务器只有一个主配置文件,没有地址库文件:

完整的正常DNS服务器:


实现PXE网络批量装機需要具备哪些条件各组件的作用,如何实现无人值守安装
  DHCP服务器:为客户机提供IP地址等参数,并告知下一个服务器地址、启动文件洺
  TFTP服务器:为客户机提供启动文件、启动菜单配置、用来安装系统的内核及初始镜像文件
  yum软件仓库:通过HTTP或FTP方式为客户机提供安装树资源(RHEL7光盘目录结构)
    1)提前准备一份安装过程中所涉及问题的答案清单(即应答文件)
    2)然后将此文件部署到客户机可下载的位置
    3)通过修妀pxelinux.0的启动配置使客户机装系统时自动调用应答文件实现面交互


  这网络自动装机,和PXE差不多原理也一样,只是把PXE做了一个封装让我们實现更轻松,不过相对而言个性化设计会比PXE复杂,总体思路还是比较简单:装包、配置主配置文件和dhcp文件、部署引导文件(直接解压)、然后依次启4个服务

  0. 搭建一台CentOS服务器,完成网络配置、yum仓库的配置、关闭防火墙和SELinux

我要回帖

 

随机推荐