当前位置:首页 > 科技数码

源地址 配置路由时如何指定源地址

  欢迎大家来到本站,本文为大家介绍配置路由时如何指定源地址,欢迎大家阅读,希望能帮到你。

  如果你的一块网卡上配置了多个IP地址,那么在数据包发出时会使用哪一个呢?在Linux上,使用iproute2工具可以设置src参数强制封装源地址:

  ip route add 1.2.3.4/32 via 4.3.2.1 src 3.3.3.3

  但是在Windows上,一切都是内部逻辑自动选择的,其原则如下:

  单网卡时,选择和默认网关在同一网段的最匹配IP地址为源;

  多网卡时,首先选择默认网关所在的网卡作为发送网卡,然而在该网卡上按照单网卡原则选择一个IP地址作为源。

  因此,如果你的目标地址是1.2.3.4,默认网关是4.3.2.1,本地连接上两个IP地址:4.3.2.2和3.3.3.3,很显然,4.3.2.2会作为源IP地址被选择,这样在发包的时候,4.3.2.2将作为数据包的源IP地址。

  然而有时候为了实现自己的一些策略或者小技巧,并不希望系统为我如此自动地封装源IP地址,比如显而易见地是在使用Open的时候。

  首先我们看下所谓的默认网关的本质意义是什么。默认网关其实是一个更加特殊的“下一跳”,它其实就是一个下一跳地址,这个地址的目的在于将数据包扔给下一跳(废话),其实它只是一个辅助作用,真正起作用的是由它解析到的MAC地址,因为MAC地址才会真正封装在以太帧当中,那个默认网关只是用来得到这个 MAC地址的,因此如果能静态指定一个MAC地址,那么这个默认网关可以是任意的。于是就有了一个办法:

  1.为一条路由生成一个和欲选择的源IP地址在同一个网段的假的默认网关,即假的下一跳;

  2.为该假网关IP地址建立一条静态的到真网关的MAC地址的arp映射;

  如此一来,源IP地址的选择过程将完全符合Windows的选择逻辑,我们也就从内核外部绕开了它的限制,从而可以选择任意的本地连接上配置的地址作为源IP地址。

  为了将手工配置的过程实现成一个自动的过程,编程是必不可少的,然而我又不想去调用那复杂的API(为了实现一个很简单的功能不得不做超级多的准备工作...),只能寄希望于脚本了,然而Windows命令行功能实在太弱,很为难。问同事,百度,google,一遍遍地尝试,折腾了太久,终于写出一个批处理脚本,发现Windows XP的脚本功能还是很强大的,更不必说Power Shell了。脚本如下(没有echo off):

  [plain]

  set destination=%1

  set mask=%2

  set origw=%3

  set source=%4

  ::获取默认网关(可以自动发现默认网关,太花哨,不提倡)

  :::GetGW

  ::set origw=

  ::for /f "delims=: tokens=2" %%i in (""ipconfig | find /i "default gateway"| findstr [0-9]."") do set origw=%%i

  ::获取默认网关的MAC地址

  :GetMac

  set mac=

  for /f "skip=3 tokens=2" %%i in ("arp -a %origw%") do set mac=%%i

  echo %mac%|findstr -

  ::这里有个问题,实际上ping失败(比如网关禁止ping)也无所谓,我们需要的只是它的MAC地址

  ::如果连MAC地址都不让解析,那就别当默认网关了。因此正确的做法应该搞一个计数器,连续

  ::两次获取MAC失败就算失败。

  if ERRORLEVEL 1 (

  ping %origw% -n 1

  if ERRORLEVEL 1 goto end

  goto GetMac

  )

  set gw=

  set i=

  ::生成假网关地址(很简单的一个算法,欲使用的源IP地址减去1)

  for /f "delims=. tokens=4" %%i in ("echo %source%") do set /a host=%%i-1

  set i=

  set j=

  set k=

  for /f "delims=. tokens=1,2,3" %%i in ("echo %source%") do set gw=%%i.%%j.%%k.%host%

  ::设置假网关的arp映射

  arp -s %gw% %mac%

  ::添加路由

  route add %destination% mask %mask% %gw%

  :end

  将上述脚本保存为"route2.bat"就可以直接用了。

  其实,选择和默认网关不属于同一网段的IP作为源IP地址对于主机而言并非一个常规的做法,如果如此一来,在数据包返回的时候,当初选择的源IP地址作为目标地址,本网段的默认网关在路由的时候会出现问题,除非它将下一跳指向该IP地址所在的主机的相同网段的地址,否则数据包可能会因为目标地址不可达而被丢弃。

  另外,上述的脚本在静态建立arp映射的时候有一个问题,那就是没有和Windows的“死网关检测”功能关联,这样就可以在网关失效后被Notofy了,或者说网关并没有失效,只是换了台机器,换了MAC,此时就需要更新那个MAC映射了。

1.《源地址 配置路由时如何指定源地址》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《源地址 配置路由时如何指定源地址》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/496273.html

上一篇

win10设置打不开 Win10电脑打不开192.168.1.1设置界面怎么办

下一篇

xp登陆界面 WindowsXP系统192.168.0.1登录页面打不开怎么办

天翼网关登录界面 192.168.1.1打开的是中国电信天翼宽带登录界面怎么办

  • 天翼网关登录界面 192.168.1.1打开的是中国电信天翼宽带登录界面怎么办
  • 天翼网关登录界面 192.168.1.1打开的是中国电信天翼宽带登录界面怎么办
  • 天翼网关登录界面 192.168.1.1打开的是中国电信天翼宽带登录界面怎么办

小米路由器设置ip地址 小米路由器的IP地址如何修改

  • 小米路由器设置ip地址 小米路由器的IP地址如何修改
  • 小米路由器设置ip地址 小米路由器的IP地址如何修改
  • 小米路由器设置ip地址 小米路由器的IP地址如何修改

路由器自动获取ip全是0 无线路由器自动获取ip地址上网怎么设置

  • 路由器自动获取ip全是0 无线路由器自动获取ip地址上网怎么设置
  • 路由器自动获取ip全是0 无线路由器自动获取ip地址上网怎么设置
  • 路由器自动获取ip全是0 无线路由器自动获取ip地址上网怎么设置

动态ip地址 路由器获取不到动态IP地址怎么办

  • 动态ip地址 路由器获取不到动态IP地址怎么办
  • 动态ip地址 路由器获取不到动态IP地址怎么办
  • 动态ip地址 路由器获取不到动态IP地址怎么办

ip地址设置 自动或手动设置IP地址图解教程

  • ip地址设置 自动或手动设置IP地址图解教程
  • ip地址设置 自动或手动设置IP地址图解教程
  • ip地址设置 自动或手动设置IP地址图解教程
获取ip地址 教你如何获取局域网中未使用的IP地址

获取ip地址 教你如何获取局域网中未使用的IP地址

局域网中如何快速查询有效IP地址?通常在日常使用电脑中为了让工作站顺利通过局域网上网,我们常常需要先为其配置一个有效的IP地址,不过局域网中究竟还有哪些IP地址没有被使用呢?下面是本站小编整理的一...

默认网关查询 查找路由器非默认IP地址的方法

  • 默认网关查询 查找路由器非默认IP地址的方法
  • 默认网关查询 查找路由器非默认IP地址的方法
  • 默认网关查询 查找路由器非默认IP地址的方法

路由器地址 如何查看路由器地址有什么方法

  • 路由器地址 如何查看路由器地址有什么方法
  • 路由器地址 如何查看路由器地址有什么方法
  • 路由器地址 如何查看路由器地址有什么方法