linux添加源地址ping,实战经验:Linux Source NAT在Ping场景下的应用

原标题:实战经验:Linux Source NAT在Ping场景下的应用

有时候,有这样的一种需求:

需要修改IP数据包中的源地址,比如,从某一个主机发送Ping包到另一个主机,需要修改源地址为另一个源(通常,发出Ping请求的主机有多个网卡地址)。

为了解决这一需求,Linux下的netfilter组件中有个Source NAT的功能,可以修改IP数据包中的源地址。

此功能实际上是通过iptables在POSTROUTING链中添加一条规则,此规则在数据包被最终发送出去之前被应用。下面是一个实例:

主机A网络配置:

eth0: 192.168.10.10

eth1: 172.18.10.10

主机B:

eth0: 192.168.10.1

1) 第一张场景

从A发送Ping请求到B:

# ping 192.168.10.1

通过WireShark抓包可以知道,Ping包中的源地址为192.168.10.10(默认Ping请求从eth0出来),目的地址是192.168.10.1。

2) 第二种场景

从A发送Ping请求到B,并使用-I选项:

# ping 192.168.10.1 -I 172.18.10.10

在此场景下,这里指定了-I选项,表明指定源地址为172.18.10.10。

所以,Ping请求包中的源地址变为172.18.10.10,目的地址不变,依然为192.168.10.1。

问题来了:怎样在第二种场景中(在指定-I选项的情况下)将源地址修改为192.168.10.10?

解决方法:添加Source NAT规则。具体步骤如下:

添加规则:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 192.168.10.10

添加完上述规则后,再次执行ping 192.168.10.1 -I 172.18.10.10,可以通过抓包发现Ping请求中的源地址已经由172.18.10.10修改为192.168.10.10。

备注:

如果想删除上面添加的Source NAT规则,可以执行如下指令删除:

删除规则:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 192.168.10.10

查看规则:

# iptables -nvL -t nat

参考资料:

以下内容来自netfilter官网帮助文档,也记录在这里留作参考:

1) Source NAT

You want to do Source NAT; change the source address of connections to something different. This is done in the POSTROUTING chain, just before it is finally sent out; this is an important detail, since it means that anything else on the Linux box itself (routing, packet filtering) will see the packet unchanged. It also means that the `-o’ (outgoing interface) option can be used.

Source NAT is specified using `-j SNAT’, and the `–to-source’ option specifies an IP address, a range of IP addresses, and an optional port or range of ports (for UDP and TCP protocols only).

16128228ec52befb199dade688b7a955.png

Masquerading

There is a specialized case of Source NAT called masquerading: it should only be used for dynamically-assigned IP addresses, such as standard dialups (for static IP addresses, use SNAT above).

You don’t need to put in the source address explicitly with masquerading: it will use the source address of the interface the packet is going out from. But more importantly, if the link goes down, the connections (which are now lost anyway) are forgotten, meaning fewer glitches when connection comes back up with a new IP address.

8facb4f40c290015f70574c0a097af4e.png

2) Destination NAT

This is done in the PREROUTING chain, just as the packet comes in; this means that anything else on the Linux box itself (routing, packet filtering) will see the packet going to its `real’ destination. It also means that the `-i’ (incoming interface) option can be used.

Destination NAT is specified using `-j DNAT’, and the `–to-destination’ option specifies an IP address, a range of IP addresses, and an optional port or range of ports (for UDP and TCP protocols only).

07755f55e2ece4cf483565b843d6099c.png

Redirection

There is a specialized case of Destination NAT called redirection: it is a simple convenience which is exactly equivalent to doing DNAT to the address of the incoming interface.

723a882b22422ae1aa52e2c6e2480ee5.png

Note that squid needs to be configured to know it’s a transparent proxy!返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac远程linux的ide,Jupyter notebook在mac:linux上的配置和远程访问

IPython 和 JupyterIPython 通常指的是一个 Python REPL(交互式解释器) shell。提供了远比 Python shell 强大的 shell 环境。IPython 是 Iteractive Python shell的缩写。 Notebook 是一个基于 IPython 的 web 应用。截止 IPython 3.0 ,IPython 变得越来越臃肿&…

Linux升级glibc版本汉字乱码,Linux CentOS6升级glibc库过程

CentOS6升级glibc库过程hadoop无法加载native库,可能原因是 glibc库版本过低,需要升级。第一:安装以下软件yum -y install zlib zlib-devel gcc gcc-c libtool openssl openssl-devel automake autoconf libtool pcre*第二、查看系统glibc版本…

linux图形界面 革命,Windows 95带来的革命

CDECDE1993年6月-在“公用桌面环境“是与Sun,惠普,IBM和合资Unix系统实验室。CDE,通用桌面环境(CommonDesktopEnvironment)的缩写。CDE是一种运行于UNIX,基于Motif部件工具箱开发的商业桌面环境。惠普的OpenVMS采用CDE作为标准的桌…

real time linux pdf,【整理】ubuntu real time Linux

ubuntu real timeUbuntu不支持实时可参考看看如何才能支持想要自己编译实时内核的话参考去:下载:The Real Time Preempt Patch然后自己编译即可。对于实时系统所支持的功能和特性以及平台,详见这里提供了 已编译好的实时的Debian相关内容或参…

arm64 linux 除零正常返回,arm64程序调用规则

前言这篇主要介绍arm64程序调用规则,详细分析了程序调用过程中,参数是如何传递的。Android、iOS、Linux等基本遵循这些规则,但是各个操作系统平台也有小部分自己特定的规则。下一篇,我将介绍iOS平台的特定规则。术语介绍术语意义A…

苹方字体 for linux,苹果苹方字体

苹果苹方字体是一款很实用的字体软件,苹果苹方字体是为中国苹果用户打造的全新字体,共有六种字重,使用方便,能够满足用户在阅读时不同的字体需求,并且苹果苹方字体还可以在安卓、Linux 等其他平台和设备上使用&#xf…

linux系统关机half,Linux 学习 (六) 关机与重启命令

JavaScript基础 DOM的操作1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 一.属性和方法: window对象——浏览器 ...推荐《HeadFirst设计模式》相对于国内初版的,HeadFirst真的是更好的…

职坐标c语言,C/C++知识点之hexdump的C语言实现

本文主要向大家介绍了C/C知识点之hexdump的C语言实现,通过具体的内容向大家展示,希望对大家学习C/C知识点有所帮助。1 void hexdump(char *buf, int len)2 {3 int i 0;45 printf("\n----------------------hexdump-----------------------…

C语言编杂志程序,c语言程序错误修改

题目:杂志订阅管理系统使用计算机对一种杂志的订阅进行管理,该杂志最多订户不超过10人,每个订户的信息包括:姓名 性别 地址 电话号码 杂志单价 订阅数 订阅期限(至**年**月)。现要求用菜单选择并完成下述的功能:(1)增加新订户,既将订户的全部信息输入到文…

c语言关键词中英翻译机编程,课程设计--C语言关键字中英翻译机

《课程设计--C语言关键字中英翻译机》由会员分享,可在线阅读,更多相关《课程设计--C语言关键字中英翻译机(21页珍藏版)》请在人人文库网上搜索。1、课课 程程 设设 计计 报报 告告 学院、系: 专业名称: 课程设计科目 所在班级&…

c语言参数不能用 吗,如何在C语言中禁止“未使用的参数”警告?

您可以使用gcc / clang的未使用属性,但是我在标头中使用这些宏,以避免在整个源代码中__attribute__都有gcc特定的属性,而且到处都有点冗长/难看。#ifdef __GNUC__# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))#else# defin…

c语言龙贝格积分法实验报告,数值作业:龙贝格算法计算积分C语言实现

数值作业:龙贝格算法计算积分C语言实现数值作业:龙贝格算法计算积分C语言实现根据Romberg算法计算定积分,和变步长的Simpson算法的输入都一样.算法基本分析:输入a,b(积分上下限),n为积分区间等分数,eps为计算精度,我这…

软件设计师考c语言,软件设计师教程考点精讲之C语言三大定律

2016下半年软考软件设计师报名即将开始,同学们是否在学习过程中遇到了一些困难,下面由希赛软考学院为打算参加下半年考试的你们准备了一些软件设计师教程考点精讲之Java编程性能措施,希望对大家有所帮助。自己总结的,觉得能帮助初…

用c语言程序算自己的年龄,新手编的小程序:计算年龄和出生后经历的天数的小程序...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includeint main(){int i,j,k,t,m,a,b,c0;int x,y,z,n;printf ("请按下面格式输年-月-日\n");printf("请输入现在年月日:\n");scanf ("%d-%d-%d",&i,&j,&k);printf("请…

计算机二级c语言公共基础题,计算机二级C语言笔试公共基础知识课后习题及答案...

全国计算机等级考试二级公共基础知识课后习题及答案1第一章数据结构与算法一.选择题1.算法的时间复杂度是指( )A. 执行算法程序所需要的时间B. 算法程序的长度C. 算法执行过程中所需要的基本运算次数D. 算法程序中的指令条数2.算法的空间复杂度是指( )A. 算法程序的长度B. 算法…

w ndows7文档加密取消,win7文件夹怎么加密?windows7文件加密方法

win7文件夹怎么加密?电脑文件隐私问题一直都是很多用户的关注重点,尤其是自己电脑经常被他人使用的朋友。也许使用第三方软件为文件夹加密比较方便,但如果能够不借助“外力”完成这一任务就更加完美。下面,我们就一起来看看windows7文件加密…

dbscan算法c语言实现,用C++实现DBSCAN聚类算法

这几天由于工作需要,对DBSCAN聚类算法进行了C的实现。时间复杂度O(n^2),主要花在算每个点领域内的点上。算法很简单,现共享大家参考,也希望有更多交流。数据点类型描述如下:复制代码 代码如下:#include using namespac…

小世界网络模型代码 c 语言,新的小世界网络模型实现文本特征的提取方法与流程...

本发明涉及语义网络技术领域,具体涉及新的小世界网络模型实现文本特征的提取方法。背景技术:目前常用的文本特征提取方法,包括词频-反文档频率方法—TF-IDF、信息增益方法、互信息等方法;TF-IDF的简单结构并不能有效地反映词汇或短…

米4用linux刷机救转,小米4变砖之后如何刷机自救?大神教你小米4线刷救砖方法...

三:使用miflash工具刷机的步骤本工具适用于小米,华为,联想等手机品牌高通版本,不只是小米专用,教程仅供参考,看完一遍后再刷机。第一步:刷机工具安装1.下载小米手机刷机工具MiPhone2015731&…

android动态更新配置文件,Android如何动态修改Manifest文件

修改manifest文件Android Manifest.xml,添加相应的声明。在这里,我们需要将新定义的活动PrefsActivity注册到manifest文件。同前面一样,在Eclipse中打开AndroidManifest.xml文件会默认进入Eclipse提供的图形化编辑界面。单击Application选项卡…