局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)linux
修改数据包的源地址web
① 局域网各主机已正确设置IP地址、子网掩码、默认网关地址vim
② Linux网关开启IP路由转发bash
临时打开: echo 1 > /proc/sys/net/ ipv4/ip_forward 或 sysctl -W net.ipv4. ip_forward=1 永久打开: vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #将此行写入配置文件 sysctl -P #读取修改后的配置
SNAT转换1:固定的公网IP地址: iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1 或 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10 内网IP 出站 外网网卡 外网IP或地址池 -s 内网IP -o 出站外网网卡 source 外网IP或地址池
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
小知识扩展: 一个I P地址作SNAT转换,通常可让内网100到200 台主机实现上网服务器
2、DNAT原理与应用1.局域网的服务器可以访问Internet网络
2.网关的外网地址有正确的DNS解析记录ssh
3.Linux网关开启IDNAT转换1:发布内网的Web服务tcp
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -P
#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11 或 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11 入站 外网网卡 外网IP 内网服务器IP iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20
#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行链接 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22 #在外网环境中使用SSH测试 ssh -p 250 root@12.0.0.1 yum -y install net-tools #若没有ifconfig 命令可提早使用yum 进行安装 ifconfig ens33
小知识扩展:ide
主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一-般要详细的指定到端口工具
网络型防火墙主要使用FORWARD链,设置规则时不多去指定到端口,通常指定到IP地址或者到网段便可
导出(备份)全部表的规则 iptables-save > /opt/ipt.txt 导入(还原)规则 iptables-restore < /opt/ipt.txt 将iptables规则文件保存在/etc/sysconfig/iptables中,iptables服务启动时会自动还原规则 iptables-save > /etc/sysconfig/iptables systemctl stop iptables #中止iptables服务会清空掉全部表的规则 systemctl start iptables #启动iptables服务会自动还原/etc/sysconfig/iptables中的规则
4、Linux抓包
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它能够打印出全部通过网络接口的数据包的头信息。
tcpdump命令工做时先要把网卡的工做模式切换到混杂模式。因此tcpdump命令须要以root身份运行。tcpdump命令是linux下使用最普遍的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工做原理。
tcpdump [参数]
经常使用参数 | 说明 |
-a | 尝试将网络和广播地址转换成名称 |
-c<数据包数目> | 收到指定的数据包数目后,就中止进行倾倒操做 |
-d | 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出 |
-dd | 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出 |
-ddd | 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出 |
-e | 在每列倾倒资料上显示链接层级的文件头 |
-f | 用数字显示网际网络地址 |
-F<表达文件> | 指定内含表达方式的文件 |
-i<网络界面> | 使用指定的网络截面送出数据包 |
-l | 使用标准输出列的缓冲区 |
-n | 不把主机的网络地址转换成名字 |
-N | 不列出域名 |
-O | 不将数据包编码最佳化 |
-p | 不让网络界面进入混杂模式 |
-q | 快速输出,仅列出少数的传输协议信息 |
-r<数据包文件> | 从指定的文件读取数据包数据 |
-s<数据包大小> | 设置每一个数据包的大小 |
-S | 用绝对而非相对数值列出TCP关联数 |
-t | 在每列倾倒资料上不显示时间戳记 |
-tt | 在每列倾倒资料上显示未经格式化的时间戳记 |
-T<数据包类型> | 强制将表达方式所指定的数据包转译成设置的数据包类型 |
-v | 详细显示指令执行过程 |
-vv | 更详细显示指令执行过程 |
-x | 用十六进制字码列出数据包资料 |
-w<数据包文件> | 把数据包数据写入指定的文件 |