虚拟机实现IP转发

  因为工作需要,在师傅的带领下实现了一个虚拟机的SNAT IP转发功能,该功能实现的效果大概就是将虚拟机当做电脑的路由器,主机的请求通过虚拟机转发出去,接收到的回应也通过虚拟机解析回来,以便在虚拟机上开发防火墙功能。

  先介绍一下设备的情况,一台很久的台式机(大概就是学校机房那种,内存3G左右,处理器i3几代不清楚)装载Windows7系统(OK,这样的配置也是可以运行虚拟机的,台式机还是比笔记本强得多),虚拟机装载Centos6.5系统,内存分配1G,磁盘空间40G。OK话不多说,我们直接开干吧。

  我们要实现的目标大概如下图所示:

  我们知道虚拟机要联网是需要一个网络适配器的,对于目标虚拟机来说需要两个网络适配器,一个用于连接外网(Internet),另一个用于连接内网(Windows7),两个网卡使用不同网段的IP,在虚拟机中实现路由转发功能。

  首先为虚拟机新建一个网络适配器,右键自己的虚拟机--->设置--->底部add”--->网络适配器

  进入Centos系统,所有关于网络的配置文件都在:

/etc/sysconfig/network-script/

 其中ifcfg-eth0就是网络适配器的配置文件,在这里,我们使用虚拟网卡的方式完成虚拟机路由器的配置,所以不需要为第二个适配器设置配置文件,它将处于混杂模式,没有IP地址,我们想让第一个网络适配器连接到外网,第二个适配器连接到内网(连接Windows),就需要进行一系列设置。

  假设外网的IP为192.168.111.9,网关为192.168.111.1,在ifcfg-eth0中将IP地址设置为外网IP,网关设置为外网网关。假设内网IP(WindowsIP)为192.168.133.5,那么需要将内网的网关设置为第二个适配器的IP地址,然而第二个适配器处于混杂模式,没有IP,需要新建一个虚拟网卡,为其设置IP并且将其绑定到第二个适配器上。

  新建虚拟网卡

brctl addbr br0

  将其绑定到适配器上

brctl addif br0 eth1

  为虚拟网卡设置IP地址(作为内网的网关使用)

ifconfig br0 192.168.133.4

  将Windows系统的网关设置为br0的IP地址

  重启网络服务(注意上面虚拟网卡的创建和设置是不会自动保存的,下次开机之后就没有了,建议写一个脚本文件将上面的内容写进去,每次开机都运行脚本)

service network restart

  这个时候两个适配器都各自连接到了该连接的地方,现在需要对两张适配器进行IP请求的转发将Windows的请求由第二个适配器eth1转发到eth0上去,通过eth0与外界沟通。

  首先开启系统的IPv4的转发功能,配置文件如下

/etc/sysctl.conf

  找到下面属性

net.ipv4.ip_forward

  将其值改为1,代表允许IPv4转发

  在转发的部分使用了iptables工具进行IP的转发,iptables是对数据包进行检测的一款简易访问工具,将规则组成一张表,实现了绝对详细的访问控制功能,使用下面命令进行IP转发

iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -o eth0 -j SNAT --to-source 192.168.111.9

  代表将192.168.133.0/24网段上所有的IP请求都由192.168.111.9转发。

  iptables设置的内容保存有两种方法,第一种将配置文件存放到一个目录

iptables-save >/var/log/iptables.backup

  需要读取配置时

iptables-restore </var/log/iptables.backup

  第二种方式是使用下面命令自动存储

service iptables save

  当然还是要重启服务

service iptables restart
service network restart 

  如此一来就完成了虚拟机充当路由器转发IP的功能

原文地址:https://www.cnblogs.com/huaxh/p/8999578.html

时间: 2024-11-17 18:23:07

虚拟机实现IP转发的相关文章

如何在主机自动IP而虚拟机静态IP的情况下相互ping通?

这两天在学习Linux,用xshell时,发现主机和虚拟机均不能相互ping通.自己查了一下主机是自动获取IP,而虚拟机是静态IP(默认静态).并且,虚拟机选用的是桥接方式.折腾了一会儿终于ping通了. 环境: 主机OS: win10 网络: 有线 虚拟机:VMware12.5.0 OS: RHEL 5.8 注: 一般情况下,主机默认为自动获取IP,VMware桥接情况下默认为静态IP. 步骤: (1) 给虚拟机Network Adapter设置Bridge方式,前提是虚拟机在关机情况下. 然

VirtualBox 给虚拟机绑定IP

在VirtualBox中,有时候打开虚拟机,会出现Waiting for 60 seconds more for network configuration这种情况,从而使得开机变得很慢. 通过以下操作,可以让虚拟机开机很快,并且开机后不用再执行sudo dhclient eth0这种操作获取IP了. 1. 在VirtualBox菜单栏的管理->全局设定(如果是英文版,则是File->preferences),点击网络(network). 2. 然后对vboxnet0进行编辑: 3. 打开虚拟

复制虚拟机vmware centos搭建集群节点过程中网络配置eth0和eth1遇到的问题以及NAT模式下虚拟机静态IP配置方法

在centos中安装完第一个虚拟机后,一般习惯通过克隆的方式创建其它虚拟机,开后vmware无法发现网卡信息,系统认为这是重新安装,所以重新创建了一个新的网卡叫eth1. 并且用IFCONFIG-a查看网卡信息,只有lo信息,无法显示eth0了. 解决方法: 修改/etc/udev/rules.d 下的 70-persistent-net.rules文件,我们会发现下面两行: # PCI device 0x1022:0x2000(pcnet32) SUBSYSTEM=="net",DR

虚拟机中ip和host设置问题

朋友碰到一个问题,就是用virtualbox建了一个ubuntu的虚拟机,但虚拟机里面ip地址是自动生成的,主机和虚拟机无法互通信息.也无法在虚拟机里面建web服务器让外网访问. 解决方案: 很简单,在虚拟机network里面设置网络模式为 桥接模式(Bridged Adapter).ok~ 安装ssh服务: sudo apt-get install openssh-server  //默认ssh-client是自动装好的,安装server端,使得外面的主机可以ssh登陆进来 设置域名就简单了

openstack虚拟机修改IP地址

1).查找虚拟机的网络端口 mysql> use neutron; mysql> select * from ports where device_id="3ab73261-82ce-4b9a-9a1c-519624e19dc2"; +----------------------------------+--------------------------------------+------+--------------------------------------+-

20150804 Ubuntu IP 转发实现网络共享

问题的引出 故事是这样的,之前一直用Ubuntu学习鸟哥Linux私房菜,然后有好多命令在Ubuntu中并没有预装,需要自己重新下载安装.另一方面Ubuntu虽然做得很好,桌面环境也非常的细腻,很多功能也能在桌面用鼠标点击几下就能实现.但是就是因为做得太好了,学习Linux的一些基础知识并不合适,人总是在困境中才能学到主动的地去发现问题和解决问题.随后果断的转战了CentOS了. 作为红帽的一种版本,CentOS用起来确实比Ubuntu要难,上手没有Ubuntu那么方便.实验室的网络连接设备有W

ip转发二叉树查找方法c实现

把以前网络课的最长前缀匹配的作业重新写了下.简单说一下,输入输出要求如下,详细要求可见课程页面:https://kattis.csc.kth.se/problem?id=forwarding2 1.路由表以fib <prefix> <interface>格式给出,以换行符结束 2.报文以input <16进制ascii码> 红色为以太报文头,蓝色为目的ip地址 Sample Input fib 10.1.0.0/24 e1 fib 10.2.0.0/24 e2 fib

shell脚本:不登陆KVM虚拟机,修改虚拟机网卡IP地址

# Author:丁丁历险(Jacob) # 该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs-tools-c 可以获得 guestmount 工具 # 脚本在不登陆虚拟机的情况下,修改虚拟机的 IP 地址信息 # 在某些环境下,虚拟机没有 IP 或 IP 地址与真实主机不在一个网段 # 真实主机在没有 virt-mange 图形的情况下,远程连接虚拟机很麻烦 # 该脚本可以解决类似的问题 #!/bin/bash #Author:丁丁历险(Jacob) #

linux下启用ip转发功能

linux发行版默认情况下是不开启ip转发功能的.这是一个好的做法,因为大多数人是用不到ip转发的,但是如果我们架设一个linux路由或者vpn服务我们就需要开启该服务了.下面我会通过几种方式开通它.检查ip转发是否开启我们需要通过访问sysctl的内核ipv4.ip_forward来判断转发是否开启.使用 sysctl: sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 0或者检查/proc下的文件: cat /proc/sys/net/ipv4