• Linux开启转发功能

    2017-11-06 15:36:27
    Linux开启转发功能

    1、检查Linux系统中转发是否打开:

    # sudo sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1

    2、如果为0,说明没有开启转发,则需要手动打开:

    # sudo sysctl -w net.ipv4.ip_forward=1

    3、没有开启的时候,docker build会报如下错误:

    WARNING: IPv4 forwarding is disabled. Networking will not work.
    2016/05/20 09:15:35 Post https://discovery.hub.docker.com/v1/clusters: dial tcp: lookup discovery.hub.docker.com on 192.168.10.2:53: read udp 172.17.0.2:56087->192.168.10.2:53: i/o timeout


    展开全文
  • 方法: 提示: 以下方法只适用于红帽企业版Linux 3 以上。...2、修改/etc/sysctl.conf文件,让包转发功能在系统启动时自动生效: #. Controls IP packet forwarding net.ipv4.ip_forward = 1 3、打开iptables的N...

    方法:

    提示: 以下方法只适用于红帽企业版Linux 3 以上。

    1、打开包转发功能:

    echo “1” > /proc/sys/net/ipv4/ip_forward

    2、修改/etc/sysctl.conf文件,让包转发功能在系统启动时自动生效:

    #. Controls IP packet forwarding

    net.ipv4.ip_forward = 1

    3、打开iptables的NAT功能:

    /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    说明:上面的语句中eth0是连接外网或者连接Internet的网卡. 执行下面的命令,保存iptables的规则: service iptables save

    4、查看路由表:

    netstat -rn 或 route -n

    5、查看iptables规则:

    iptables -L

    展开全文
  • Linux 下的端口转发工具非常多,关于使用方法网上也是非常详尽。因此在本文中,就不再赘述前人的研究成果,主要侧重的是研究不同工具在做端口转发时的特征。为了方便下面的讨论,首先交代一下场景:有两台主机A(172...

    Linux 下的端口转发工具非常多,关于使用方法网上也是非常详尽。因此在本文中,就不再赘述前人的研究成果,主要侧重的是研究不同工具在做端口转发时的特征。

    为了方便下面的讨论,首先交代一下场景:有两台主机A(172.17.0.2)和B(172.17.0.3),其中A开放SSH服务(22端口)。现在,基于一些不可描述的原因,B无法直接与A的22端口建立TCP连接,这时B若想通过SSH连接A,必须通过端口转发来实现。

    既然是端口转发,那么一定需要一个“中介”,这个中介一方面要能将B的请求发送给A,另一方面也能将A的响应发回给B,否则通信就不能建立起来。这个中介可以是另一台主机,也可以是A自身。下面我们逐个讨论一下:


    假设有一台主机C(172.17.0.4),C可以连接A的22端口,B也可以和C建立连接,那么B便可以将C作为跳板。具体操作如下:


    通过socat

    在C上执行:socat TCP-LISTEN:2222,fork TCP:172.17.0.2:22

    此时C会监听2222端口,并且将从2222端口上接收到的数据转发给主机A的22端口。


    查看端口转发时C的端口使用情况:




    A的端口使用情况:



    可以看出C其实用了两个端口,一个端口用于监听和接受来自B的请求,另一个端口用来和A建立连接。


    通过ssh本地端口转发

    实际上,我们最经常使用的ssh客户端也自带端口转发功能,使用方法如下:

    在C上执行:ssh -gfNL 2222:localhost:22 root@172.17.0.2


    实际上就是从C上SSH登陆A,只是比普通登陆多了几个选项,执行后,C的端口使用情况:


    可以看出ssh客户端做了两件事,一是与A上的sshd建立连接,而是打开并监听2222端口等待连接。B连接C的2222端口后,A上多了两条连接:


    可以看出,这种模式中数据的流向是上这样的:B与C的2222端口建立连接,将数据发给C的ssh客户端,C将数据加密后发给A的sshd服务器,A的sshd服务器将数据解密后,再通过一个TCP连接将数据送往目的地。


    上面命令所用的几个参数中,需要着重介绍“-L port:host:hostport”这个参数,其中第一个port比较好理解,就是ssh客户端这面需要监听的端口,而“host:hostport”这个有点让人难以理解,为什么是“localhost:22”呢?通过查看ssh的帮助文档,发现这个端口实际是第二次转发的目的端口,所以填“localhost:22”就表示最终要连接的是自己的22端口,如果要填“www.baidu.com:80” 则表示最终要连接是的www.baidu.com的80端口


    通过ssh远程端口转发

    上面两种模式都是C主动连接A,但是若C无法主动连接A,而A可以主动连接C,则必须要用ssh远程端口转发:

    在A上执行:ssh -gfNR 2222:localhost:22 root@172.17.0.4


    即A通过SSH登录C,命令执行后,查看C上端口监听情况:


    可见虽然已经成功建立转发渠道,但是只能接受来自本地的连接,要想让C监听所有接口,需要将C的sshd的“GatewayPort”选项设为“yes”。


    同样还是B连接C的2222端口,连接后A的端口使用情况为:


    可以看出,远程转发和本地转发的区别在于:远程转发是A要求C转发,而本地转发则是C主动转发。


    其他工具

    除了上面说的几种方法以外,还有许多工具可以做端口转发,如iptables,rinetd,lcx等等,但是由于原理和特征都基本上相同,这里就不再讨论了。

    总结一下上面所说的端口转发方式,从发起连接的主体来看可以分成本地转发和远程转发(类似于正向代理和反向代理),从转发的次数来看可以分为一次转发和两次转发两种。每种方法都有各自的特征和适用场景。



    上面所说的方法全都需要跳板机才能实现,实际上,如果A对B开放了一部分端口(如2222),那么不经过其他主机也可以达到端口转发的目的。工具和上面所说的一样,仅仅是参数改变了一下而已。


    通过socat

    在主机A上执行:socat TCP-LISTEN:2222,fork TCP:localhost:22

    B连接A的2222端口后,A上端口使用情况:



    通过ssh本地转发

    在主机A上执行:ssh -gfNL 2222:localhost:22 root@localhost

    B连接A的2222端口后,A上端口使用情况:


    通过ssh本地转发

    在主机A上执行:ssh -gfNL 2222:localhost:22 root@localhost

    B连接A的2222端口后,A上端口使用情况:


    通过ssh远程转发

    在主机A上执行:ssh -gfNR 2222:localhost:22 root@localhost,如果只能监听环回接口,则也需要和上面一样修改sshd配置


    通过rinetd转发

    编辑/etc/rinetd

    添加一行:0.0.0.0 2222 127.0.0.1 22

    重启rinetd


    通过lcx转发

    lcx -m 1 -p1 2222 -h2 127.0.0.1 -p2 22


    通过nc转发

    mkfifo /tmp/xx; (nc -lkp 2222) </tmp/xx | (nc localhost 22) >/tmp/xx 2>&1; rm –f /tmp/xx


    比较一下使用跳板机和不使用跳板机两种方式,可以发现两种并没有本质区别,后者其实是前者的特例。其实只要了解其中的原理,那么自己实现一个端口转发的工具也不是难事。 这篇文章重点关注的是在做端口转发时的命令特征和连接特征。对于内网防护来说,研究端口转发一方面是能知道黑客能用端口转发做什么,另一方面是能够帮助网络管理员及时发现端口转发行为,定位到问题主机。


    参考资料:

    1.  http://lisux.me/lishuai/?p=439

    2. https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

    3. https://my.oschina.net/sbcagf/blog/782952



    通过ssh本地转发

    在主机A上执行:ssh -gfNL 2222:localhost:22 root@localhost

    B连接A的2222端口后,A上端口使用情况:

    通过ssh远程转发

    在主机A上执行:ssh -gfNR 2222:localhost:22 root@localhost,如果只能监听环回接口,则也需要和上面一样修改sshd配置


    通过rinetd转发

    编辑/etc/rinetd

    添加一行:0.0.0.0 2222 127.0.0.1 22

    重启rinetd


    通过lcx转发

    lcx -m 1 -p1 2222 -h2 127.0.0.1 -p2 22


    通过nc转发

    mkfifo /tmp/xx; (nc -lkp 2222) </tmp/xx | (nc localhost 22) >/tmp/xx 2>&1; rm –f /tmp/xx


    比较一下使用跳板机和不使用跳板机两种方式,可以发现两种并没有本质区别,后者其实是前者的特例。其实只要了解其中的原理,那么自己实现一个端口转发的工具也不是难事。 这篇文章重点关注的是在做端口转发时的命令特征和连接特征。对于内网防护来说,研究端口转发一方面是能知道黑客能用端口转发做什么,另一方面是能够帮助网络管理员及时发现端口转发行为,定位到问题主机。


    参考资料:

    1.  http://lisux.me/lishuai/?p=439

    2. https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

    3. https://my.oschina.net/sbcagf/blog/782952


    展开全文
  • LVS的转发主要通过修改IP地址 (NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。 NAT模式: 网络地址转换 NAT(Network Address Translation)是一种外网和内网地址映射的技术。...

    一、lvs-nat模式原理

    LVS的转发主要通过修改IP地址 (NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

    NAT模式: 网络地址转换
    NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

    二、LVS—NAT模型的特性

    RS应该使用私有地址,RS的网关必须指向DIP 
    DIP和RIP必须在同一个网段内, 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈 
    支持端口映射 
    RS可以使用任意操作系统 
    
    缺陷:对Director Server压力会比较大,请求和响应都需经过director server
    

    三、iptables之四表五链(理解数据包的流向)

    四表:
    	filter表——过滤数据包 
    	Nat表——用于网络地址转换(IP、端口) 
    	Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS 
    	Raw表——决定数据包是否被状态跟踪机制处理 
    五链:
    	INPUT链——进来的数据包应用此规则链中的策略 
    	OUTPUT链——外出的数据包应用此规则链中的策略 
    	FORWARD链——转发数据包时应用此规则链中的策略 
    	PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理) 
    	POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据 包出来的时侯都先由这个链处理)
    

    四、lvs-nat模式实现负载均衡的配置

    环境:

    server1: eth0 172.25.75.1(内网) eth1:172.25.254.100 (外网)
    server2: eth0 172.25.75.2
    server3: eth0 172.25.75.3

    1、server1作为实现负载均衡的调度器

    网络设置:
    在这里插入图片描述

    2、在server1添加ipvsadm策略

    ipvsadm -A -t 172.25.254.100:80 -s wrr
    ipvsadm -a -t 172.25.254.100:80 -r 172.25.75.2 -m -w 1
    ipvsadm -a -t 172.25.254.100:80 -r 172.25.75.3 -m -w 1
    ipvsadm -l
    /etc/init.d/ipvsadm save
    

    在这里插入图片描述

    3、在server1开启路由机制

    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    
    sysctl -p
    

    在这里插入图片描述
    在这里插入图片描述

    4、在server1加载NAT模块开启服务

    modprobe iptable_nat 		#注:如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超
    时现象
    /etc/init.d/ipvsadm start  #开启服务
    

    在这里插入图片描述

    5、server2作为后端服务器

    route add -net 0.0.0.0 gw 172.25.75.1
    ip addr show
    route -n
    

    在这里插入图片描述

    /etc/init.d/httpd start		#开启httpd服务
    

    6、server3作为后端服务器

    route add -net 0.0.0.0 gw 172.25.75.1
    ip addr show
    route -n
    /etc/init.d/httpd start
    

    在这里插入图片描述

    测试:

    用与外网ip 172.25.254.100相同的网络位的客户端测试:

    curl 172.25.254.100
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    成功使用LVS实现负载均衡的NAT(路由转发)模式!!!

    展开全文
  • 要想继续学习linux 内核协议栈,必须明白二层转发的流程。这篇文章举例讲一讲二层转发的流程。 二层转发是根据报文的目的MAC直接进行转发转发过程中不用对报文的头部做任何的修改。 三层转发则是...

    做为网络设备,二层转发是最基本的功能。要想继续学习linux 内核协议栈,必须明白二层转发的流程。这篇文章举例讲一讲二层转发的流程。



    二层转发是根据报文的目的MAC直接进行转发,转发过程中不用对报文的头部做任何的修改。


    三层转发则是根据报文的ip 地址来进行转发,并且要对报文的二层头部进行相应的修改。




    进行二层转发的设备一般叫做网桥(bridge)。桥可以是一个单独的一台网桥设备,也可以是运行在设备内的软件实例,即虚拟桥,又叫软桥。这里我们的桥指的是软桥。



    桥接是指报文经过桥后直接根据桥内维护的转发信息表把报文原封不动的转发出去,因为报文经过桥转发后报文不被修改,所以桥设备在整个链路上是透明的。


    每个桥内都会维护一张转发信息表,转发表项包含如下信息:


    MAC:设备的MAC地址

    port:该设备连接在交换机的哪个端口。


    所以桥收到报文后根据目的MAC查到表项就知道报文的出端口,直接转发出去即可。




    下面就以同一网段内两台PC之间 ping 报文的通信流程来讲一下二层转发中报文的处理流程:



    214256953.jpg


    如上图所示:



    交换机上运行一个软桥的实例,eth0 eth1 两个物理口加入到软桥中。这时eth0 和 eth1 接口上都不需要配置ip 地址,并且被配置为混杂模式。


    PC1 PC2通过交换机组成一个局域网。我们以PC1 ping PC2 为例来说明二层转发时报文的处理。



    交换机一起动时,桥内部维护的转发信息表(FDB表)是空的。



    1、PC1 ping PC2,PC1需要封装一个ICMP requset 报文。三层报文头信息为



    dip:192.168.2.3


    sip:192.168.2.2



    封装完三层报文头后,开始封装二层报文头,这里是以太网的二层头。封装二层头时需要知道目的ip 对应的MAC地址。PC1 发现目的IP 和自己的IP在同一网段,PC机即知道目的主机和自己在同一个局域网里。PC1发送arp 请求来请求PC2MAC地址。



    2、arp request 是个广播报文,到达交换机时,进入软桥进行处理。首先桥会进行MAC地址的学习,取得报文的源MAC,在桥维护的转发表(FDB表)中查找,发现没有该MAC的记录信息,然后把该MAC及该MAC对应的端口添加到转发表中。交换机的桥维护的转发表中现在有如下表项:



    0001.0002.000a   eth0


    3、经过2步地址学习后,软桥发现该报文是广播报文,会在整个桥内进行广播,即从桥内每个端口往外发送一份,但该报文的入端口除外。



    4、报文经过桥广播,也从eth1 口转发出来,被PC2收到。PC2发现是请求自己的MAC地址,PC2首先会进行arp学习。根据arp 请求报文中源MAC 和源IP ,PC2arp 表项添加到自己的arp 表中。现在PC2arp 表中有如下表项:


    192.168.2.2  0001.0002.000a



    5、PC2封装arp 回应报文发送出去


    6PC2arp 回应报文通过eth1 口进入交换机的软桥中进行处理。软桥首先进行地址学习,这时在交换机的桥维护的转发表中添加如下表项:



    0001.0002.000b   eth1



    7、然后根据arp 回应报文的目的MAC在转发表中查找,找到最初学习的转发表项


    0001.0002.000a   eth0


    根据该表项知道该报文应该从eth0 口上转发出去,桥进行转发。




    8PC1 收到从交换机转发出来的arp 回应报文,首先进行arp 学习,现在PC1arp 表中有如下表项:


    192.168.2.3  0001.0002.000b




    9、这时PC1可以封装ping 请求报文的二层头了。



    Dmac: 0001.0002.000b


    Smac: 0001.0002.000a


    Dip :192.168.2.3


    Sip: 192.168.2.2


    发送给交换机



    10、交换机根据转发表中的信息把报文从eth1口发送出来。



    11、PC2收到ping 的请求报文后,发现时请求自己的,自己封装ping 的回应报文,发送给交换机。



    12、交换机根据转发表中的信息从eth0口发送出来。PC1收到回应,ping过程结束。




    总结:

    如上所述,桥会自己进行MAC学习,来维护一张转发信息表。收到报文后用报文的目的MAC来进行查找,找到相应出端口直接把报文从出端口转发出去。如果是广播报文,就会在整个桥内进行广播,从桥中每个端口发送一份出去(报文源端口除外)。如果查找转发信息表后没找到相应的表项,就在桥内进行泛洪,即从桥中每个端口发送一份出去(报文源端口除外)。这样使连接在每个端口的设备都能收到一份报文,如果相应设备发现是到本节设备的报文,就进行处理。其他设备发现不是到本机的报文,就直接丢弃了。


    一般连接在端口上的设备都会发送一些报文出来,所以只要设备有报文发送出来,桥就能学习到转发信息。所以桥内的转发信息表会很快的建立起来。出现泛洪的报文不会太多。



    二层转发的一些概念:



    未知单播:报文进入桥里,在FDB表中没有查到该报文的目的MAC,这时桥就不知道把该报文从哪个具体的端口转发出去。这样的报文就称作未知单播。




    未知单播的处理:未知单播在桥内采用泛洪的转发处理,即把该未知单播报文从桥里的每个端口发送一份出去,但不往该报文的源端口发送。如果桥里划分了vlan,就从vlan内进行泛洪。




    混杂模式:端口的一种状态,端口可以接收目的MAC不是该端口MAC的报文。一般端口默认是只接收目的MAC是该端口MAC的报文,但要进行转发,端口是要求接收目的MAC不是该端口的MAC,这时就要把端口模式设置为混杂模式。




    二层口:二层口是指只具有二层转发功能的端口。从开发者角度来说,二层口和三层口在内核中都对应了一个net_device,但二层口是没有配置ip地址并且端口设置为混杂模式,并且加入网桥的端口。



    VLAN的二层转发:


    上面我们没提到VLAN ,VLAN在整个二层转发来说是很重要的。上面没配置VLAN时,整个桥是一个广播域。如果桥里面有多个端口,这样每个广播报文都会从桥里每个端口转发一份出去,造成网络带宽资源的浪费,同时也造成了连接在端口设备的负担。在组网上也不利于网络的管理。这样就产生了VLAN的技术。




    一般设备都使用按端口来进行VLAN的划分。我们可以在一个桥里划分多个VLAN,每个VLAN 里添加多个端口。



    这样一个VLAN 是一个广播域,同VLAN 内的端口通过二层转发是可以互通的,不同VLAN 内的端口通过二层转发是不通的。不同VLAN内的转发只能通过三层转发来进行互通。









    本文出自 “耀洋的博客” 博客,请务必保留此出处http://yaoyang.blog.51cto.com/7657153/1266395

    展开全文
  • LVS的三种包转发模式: 1、NAT(网络地址映射) 2、IP_TUN(IP隧道) 3、DR(Direct Routing)(应用较多) LVS的几种调度模式 三种转发模式的实战 1、NAT模式 2、IP-TUN模式 3、DR模式 LVS(Linux Virtual.....
  • Linux 开启IP转发功能

    2016-02-22 14:17:50
    1.控制IP转发的配置文件 /etc/sysctl.conf 2.更改转发参数(0, 关闭; 1, 开启) # Controls IP packet forwarding net.ipv4.ip_forward = 1 3.查看配置 sysctl -p 4.临时更改转发设定 sysctl -w ...
  • 大家好,今天我们学习一下在 Linux 上用 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发)。IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络。所以,它能作为一个路由器...
  • Linux下NAT修改IP地址

    2019-06-02 23:14:37
    Linux 下NAT模式修改IP地址 vim /etc/sysconfig/network-scripts/ifcfg-网卡名称 例如我的网卡设备名称是etho vim /etc/sysconfig/network-scripts/ifcfg-eth0 如图: BOOTPROTO=dhcp:根据dhcp获取ip 如果需要改...
  • 出自https://www.ibm.com/developerworks/cn/linux/l-hisock.html转发并mark一遍关于linux下tcp/ip通信优化的好文章,在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4...
  • 原文链接:http://www.linuxidc.com/Linux/2016-09/135521p2.htm 二、NAT(地址转换模式) 刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT...
  • Linux rhel6.5作为WEB-内网(client),IP地址:192.168.10.10 ,——VMnet8 ; Linux rhel6.5作为GATEWAY—网关, eth1的IP地址:192.168.10.1——VMnet8;eth2的IP地址:202.100.10.1——VMnet1; Linux rhel6.5...
  • 进入linux。在网络配置里面就可以看到多了一个网卡接口eth1.设置这个网卡接口的ip和MAC不需要设置网关.设置配置文件:vi/etc/sysconfig/network-scripts/ifcfg-eth1#AdvancedMicroDevices[AMD]79c970[PCnet32...
  • 正常我们的无线网卡工作在sta模式,通过连接路由进行上网。在Windows下,我们可以用猎豹、360和腾讯管家里的一些软件助手,把我们的无线网卡开一个热点,同样,在Linux中。我们也可以把我们无线网卡的热点打开,让...
  • 在上图中 “网络” 右键——》属性——》更改适配器设置 就能进入以下界面:在上面1(即VM8)右键选择属性进入第二个页面,在第二个页面点击2处,然后点击3处,进入第三个页面,就可以看到4处的情况。 二、打开...
  • 要想继续学习linux 内核协议栈,必须明白二层转发的流程。这篇文章举例讲一讲二层转发的流程。  二层转发是根据报文的目的MAC直接进行转发转发过程中不用对报文的头部做任何的修改。  三层转发是根据报文...
  • 在Windows下,我们可以用猎豹、360和腾讯管家里的一些软件助手,把我们的无线网卡开一个热点,同样,在Linux中。我们也可以把我们无线网卡的热点打开,让其他设备能够连接。这里基于天嵌的IMX6UL平台,使用8723bu ...
  • 现在存储产品CSS使用了多网卡bond6模式,在这里把多网卡的7种bond模式原理和大家分享:Linux 多网卡绑定网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6常用的有三种mode=0:平衡负载...
  • 实验:路由连接与转发1、五台机器,其中三台充当路由器,剩余两台作为主机VMnet1 192.168.41.0VMnet4 192.168.141.0VMnet5 172.26.41.0VMnet6 10.41.41.0 主机1 centos6 :192.168.41.171 适配器3:VMnet1 192.168....
  • LVS的三种转发模式 2011-04-20 10:57:20| 分类: lvs | 标签:arp real ip server lvs |举报 |字号 订阅 1. DR模式:(Direct Routing)直接路由模式 DR模式的网络拓扑: 1) 工作过程: 当一个client发送...
1 2 3 4 5 ... 20
收藏数 45,248
精华内容 18,099