博客
关于我
linux更改源地址发送数据包,发往Docker容器内的数据包源地址被修改的研究
阅读量:795 次
发布时间:2023-02-04

本文共 1610 字,大约阅读时间需要 5 分钟。

数据包源地址修改研究实践记录

实践环境一

系统配置

  • 操作系统:CentOS 7.2
  • Docker版本:1.12.6
  • 网络设备:CentOS 7.2 + Docker 1.12.6

Docker配置

  • 关闭firewalld:
    systemctl stop firewalld
  • 设置SELinux为Permissive模式:
    setenforce 0
  • 修改Dockerdaemon.json:
    {  "userland-proxy": true}
  • 创建容器:
    docker run -itd --name python --network bridge -p 8000:9999/udp --entrypoint bash python:2.7.15

容器程序

#!/usr/bin/env python# -*- coding: utf-8 -*-import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.bind(('0.0.0.0', 9999))print('Bind UDP on 9999...')while 1:    data, addr = s.recvfrom(1024)    print(f'addr: {addr}, data: {data}')

实践过程分析

一、通过另一台主机发送数据包

  • 发送数据包
    echo mac | nc -s 192.168.84.79 -p 42731 -u 192.168.84.75 8000
  • 抓包分析
    • 主机网卡(eno16777984):无内容
    • 物理网卡(eno16777984):收到数据包
    • Docker0:收到数据包
    • 容器网卡(vethc4d778f):收到数据包
  • NAT表对比
    • 发送前:无修改
    • 发送后:数据包源地址、源端口与目的地址、目的端口发生变化

二、本机通过IP地址发送数据包

  • 发送数据包
    echo mac | nc -s 192.168.84.75 -p 34191 -u 192.168.84.75 8000
  • 抓包分析
    • 物理网卡(eno16777984):无内容
    • Docker0:收到数据包
    • 容器网卡(vethc4d778f):收到数据包
  • NAT表对比
    • 发送前:数据包未修改
    • 发送后:数据包源地址、源端口与目的地址、目的端口发生变化

三、本机通过127.0.0.1发送数据包

  • 发送数据包
    echo mac | nc -s 127.0.0.1 -p 33089 -u 127.0.0.1 8000
  • 抓包分析
    • 物理网卡(eno16777984):无内容
    • Docker0:收到数据包
    • 容器网卡(vethc4d778f):收到数据包
  • NAT表对比
    • 数据包经过POSTROUTING链,源地址被修改为172.17.0.1

四、通过容器IP地址发送数据包

  • 发送数据包
    echo mac | nc -s 172.17.0.1 -p 42883 -u 172.17.0.2 9999
  • 抓包分析
    • Docker0:收到数据包
    • 容器网卡(vethc4d778f):收到数据包
  • NAT表对比
    • 数据包源地址被修改为172.17.0.1

总结

通过实验发现:

  • SNAT规则的作用:CentOS中的SNAT规则主要定义在POSTROUTING链,用于修改数据包的源地址。
  • Docker的网络处理:Docker的SNAT规则没有定义在INPUT链,而是在POSTROUTING链完成。
  • 数据包来源判断的可靠性:数据包来源地址可能被修改,导致来源主机判断的不可靠性。
  • 建议:

  • 本机访问:建议使用本机IP地址访问,而不是127.0.0.1。
  • 数据包来源判断:不建议以数据包源IP地址作为来源主机的判断依据。
  • 网络环境优化:根据实际需求调整iptables规则,确保网络传输的可靠性。
  • 转载地址:http://ijkfk.baihongyu.com/

    你可能感兴趣的文章
    Linux学习笔记020---CentOs7.3 搭建 Solr单机服务
    查看>>
    linux学习笔记(打包压缩工具)
    查看>>
    Linux学习笔记:btrfs
    查看>>
    Linux安全与密钥登录指南,零基础入门到精通,收藏这篇就够了
    查看>>
    Linux安全加固速查手册:22条高效防护策略,零基础入门到精通,收藏这一篇就够了
    查看>>
    Linux安全策略selinux详解
    查看>>
    Linux安全防护
    查看>>
    Linux安装 vmware workstation
    查看>>
    Linux安装Anaconda3过程详解
    查看>>
    linux安装composer及安装yii2
    查看>>
    Linux安装gcc/gcc-c++
    查看>>
    linux安装HelixServer实现视频分发播放
    查看>>
    linux安装java的tar包,Linux系统下安装配置JDK(rpm方式及tar.gz方式)
    查看>>
    Linux安装JDK 17
    查看>>
    Linux安装JMeter进行压力测试
    查看>>
    Linux安装KVM
    查看>>
    linux安装mysql
    查看>>
    Linux安装Mysql5.7.23详细教程(CentOS7)
    查看>>
    Linux安装Mysql完整步骤
    查看>>
    Linux安装mysql:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql
    查看>>