最近研究了一下Linux平台的网络IP转发和端口映射方面的东西,作了一点笔记。在学习时,查了很多资料,有的写的不是很清楚明白,而自己对这方面了解又不多,花的时间还是不少的。

一、网络转发
环境:某设备,双网卡,Fedora 18系统(即Linux路由器,IP都是网关),
网络环境:A网段为172.17.X.X,B网段为100.100.100.X。
目的:直接使用IP地址的形式来访问到跨网段的IP。比如,在A网段的172.17.17.168上访问到100.100.100.101。
配置:将Linux配置成为一台路由器,即可实现跨网段访问。

1、“路由器”的配置
在该设备上配置IP地址、网关(即作为路由器的机器)。
第一个网口连接到A网,地址如下(连此网口的设备网关为下面的IP):
ifconfig em1 172.17.17.188 netmask 255.255.0.0
第二个网口连接到B网,地址如下(连此网口的设备网关为下面的IP):
ifconfig p1p1 100.100.100.254 netmask 255.255.255.0
route add -net 100.100.100.0/24 gw 100.100.100.254 dev em1
route add -net 172.17.0.0/16 gw 172.17.17.188 dev p1p1

使能转发:
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables转发:
iptables -A FORWARD -p ip -s 100.100.100.0/24 -j ACCEPT

保存:
service iptables save
重启
service iptables restart

2、客户端配置
B网络为其它的Linux设备,其IP配置为100.100.100.X网络,网关IP为100.100.100.254。路由信息如下:
root@latelee:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
255.255.255.255 *               255.255.255.255 UH    0      0        0 eth0
100.100.100.0   *               255.255.255.0   U     0      0        0 eth0
100.100.101.0   100.100.100.254 255.255.255.0   UG    0      0        0 eth0
default         100.100.100.254 0.0.0.0         UG    0      0        0 eth0

A网络有一台虚拟机,其IP配置为172.17.X.X网络,网关为172.17.17.188。
如下:
latelee@ubuntu:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:cd:22:76 
          inet addr:172.17.17.168  Bcast:172.17.17.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fecd:2276/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:290610 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1600 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25810466 (25.8 MB)  TX bytes:173097 (173.0 KB)
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:339 errors:0 dropped:0 overruns:0 frame:0
          TX packets:339 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:31654 (31.6 KB)  TX bytes:31654 (31.6 KB)

在A网络的虚拟机上测试B网络的连通性:
latelee@ubuntu:~$ ping 100.100.100.101
PING 100.100.100.101 (100.100.100.101) 56(84) bytes of data.
64 bytes from 100.100.100.101: icmp_req=1 ttl=128 time=2.16 ms
64 bytes from 100.100.100.101: icmp_req=2 ttl=128 time=2.41 ms
^C
--- 100.100.100.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 2.165/2.289/2.414/0.133 ms

可以ping通,说明已经完成了路由功能。至于telnet、ftp、web界面,只要系统支持,当然也是正常的。

3、其它
fedora不知从什么版本开始,把经典的网卡设备eth0改名了(不专门使用fedora,没去研究,但ubuntu是没有变化的),从我的测试情况看,第一个(eth0)网络设备叫em1,第二个设备叫p1p1。
起初测试时,并不能实现跨网段访问,后来发现,是因为我的笔记本电脑同时开了wifi连接公网(为了方便上网、找资料)。一旦开了wifi就不能访问了。可能是同时有2个网关,ping的时候跑到另外一个去了。不是网络专业的,没研究那么深。

二、端口映射

环境:某设备,双网卡,ubuntu 14.04系统(要实现映射功能),第一个网卡连公网,IP为172.17.17.188。
网络环境:A网段是公网,172.17.X.X,B网段为内网,IP段:100.100.100.X。
目的:实现端口映射。比如,在A网段的172.17.17.168虚拟机上访问上面提到的设备(称“转发机器”)172.17.17.188的8080端口,则可以直接访问到IP为100.100.100.101的80端口。

查看Linux转发是否使能:
cat /proc/sys/net/ipv4/ip_forward

如显示0,则不使能,需要使能
echo 1 > /proc/sys/net/ipv4/ip_forward
上面命令只是临时生效,要永久生效,在ubuntu系统修改/etc/sysctl.conf文件,把ip_forward的注释打开就行了
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

将转发机器8080映射到设备的80端口
iptables -t nat -A PREROUTING -d 172.17.17.188 -p tcp --dport 8080 -j DNAT --to-destination 100.100.100.101:80
iptables -t nat -A POSTROUTING -d 100.100.100.101 -p tcp --dport 80 -j SNAT --to 172.17.17.188
iptables -A FORWARD -o eth0 -d 100.100.100.101 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.100.100.101 -p tcp --sport 80 -j ACCEPT
(
注,只用下面2条命令好像也可以:
iptables -t nat -A PREROUTING -m tcp -p tcp -d 172.17.17.188 --dport 8022 -j DNAT --to 100.100.100.101:80
iptables -A FORWARD -m tcp -p tcp -d 100.100.100.101 --dport 80 -j ACCEPT
)

保存iptables配置(注:好像不要这步也行,网上说这步是保存配置,重启时生效,但我试了是不生效的)
iptables-save

查看效果
iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             100.100.100.101      tcp dpt:http
ACCEPT     tcp  --  100.100.100.101      anywhere             tcp spt:http
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如果要清空iptables,可以使用下面的几个命令:
iptables -F
iptables -X
iptables -Z

上面提到的是web端口,测试时在浏览器中输入转发机器的IP地址(而不是最终的目的机器的IP地址)和端口即可访问。如果是映射telnet的23端口,则可以用telnet命令去连接设备。

李迟,记于2014年10月20日中午

Linux网络转发和端口映射的笔记相关推荐

  1. linux设置mysql防火墙端口映射_Linux防火墙默认是关闭3306端口,iptables实现端口转发、端口映射及双向通路...

    iptables实现端口转发.端口映射及双向通路其实不难配置,看下文: 允许数据包转发: #echo 1 > /proc/sys/net/ipv4/ip_forward 转发TCP 8081到x ...

  2. linux 防火墙 443端口映射,linux防火墙实现端口转发、端口映射及双向通路

    iptables实现端口转发.端口映射及双向通路其实不难配置,看下文: 允许数据包转发: #echo 1 > /proc/sys/net/ipv4/ip_forward 转发TCP 8081到x ...

  3. windwos 端口转发、端口映射(PassPort Control)

    windwos 端口转发.端口映射 有的vpn只能在windows上运行,所以使用mac时,需要安装虚拟机,在虚拟机中运行vpn然后进行开发. 这时,如果想要在mac端进行开发,则需要虚拟机windw ...

  4. Linux系列——VMware虚拟机配置端口转发(端口映射),实现远程访问

    前言 先赞后看,此生必赚! 本文所写的远程为各个电脑在同一个网段内: 本文主要详细介绍如何远程访问虚拟机里面的项目! 机器:虚拟机(装在电脑1里).电脑1(宿主机).电脑2.电脑3.电脑4.电脑n.. ...

  5. LINUX用iptable完成端口映射

    用iptable完成端口映射 问:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10.192.168.1.11,网关linux,内网eth0,IP为192.168.1 ...

  6. java实现端口映射_Java BIO实现TCP端口转发(端口映射)功能源码

    开发环境及开发目标说明: 开发背景:为了网络的安全,工作的网络环境的变得比较复杂,很多主机的端口一定程度上的受到了保护,需要从能访问到的中间机器做跳转. 开发环境:JDK1.6 + Eclipse4. ...

  7. Linux批量加连续端口映射,批量端口映射

    内网ip 10.199.2.12 虚拟机网络 192.168.10.0/24 内网访问示例,如访问ip为192.168.10.20的虚拟机, 远程桌面 10.199.2.12:6020 vnc 10. ...

  8. XShell远程连接LInux服务器(地址端口映射方法)

    所实现的功能: 这篇文章主要是记录我在非同一局域网下用win10系统的Xshell去连接Linux系统服务器. 环境:一台win10主机,已安装好Xshell7,局域网ip:192.168.0.132 ...

  9. linux下ftp防火墙端口映射,centos6利用iptables用DNAT实现端口映射并解决ftp列表错误问题...

    之前写了centos7下利用firewall防火墙实现了端口映射的功能来达到加速80端口的目的,但是如果同时也要转发ftp流量的话就会一直出现ftp连接列表错误问题,查询了下相关资料,这是由于源IP通 ...

最新文章

  1. 复杂系统设计 企业开发的困境
  2. 使用Google App Engine、Google Closure Library与Clojure编写HTML5应用
  3. of python检索文献 science web_硕博士都在学的Python神技,有大神带!
  4. C语言数据库公共知识,全国计算机二级C语言公共基础知识数据库设计基础
  5. 电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统
  6. PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
  7. 实体类 接口_spring-boot-route(五)整合Swagger生成接口文档
  8. 广度优先搜索——USACO08FEB(洛谷 P2895)
  9. 服务器配置文件设计,IM配置服务器概要的设计文件.doc
  10. 《Windows游戏编程大师技巧》(第二版)
  11. 计算机系统存储器 分类,存储器的分类
  12. minicom - 友好易用的串口通信程序
  13. [ipsec][crypto] 什么是AEAD加密算法中的AAD 及aad length
  14. 基于OBS超低延迟直播实测(400毫秒左右)超多组图
  15. spring Mvc中的适配器模式
  16. 奥维地图显示所有标注
  17. 前端框架比比看:bootstrap, bulma, foundation, material-design-lite, materialize-css, semantic-ui
  18. 硬件PM系列(二):硬件产品经理需要熟知的设计流程
  19. 如何调换手机桌面位置_如何改变华为手机桌面三个方向按键的位置?
  20. Excel怎么导出百万级数据

热门文章

  1. 400是什么错误_Spring Boot的REST API错误处理
  2. 500块钱买一个手机壳,为什么年轻人如此上头?
  3. 卢伟冰为Redmi K50电竞版预热:相机拍照效果越来越出色
  4. 《长津湖之水门桥》定档大年初一 想看热度跻进春节档TOP3
  5. 只卖男人,年赚5.6亿!全网最火“爱情骗子”,被戳穿了
  6. 《英雄联盟:双城之战》全球首映 沉浸式观影打造追剧新潮流
  7. 得益于iPad 苹果二季度在平板电脑应用处理器市场份额接近60%
  8. 小米MIX 4屏幕细节曝光:首发柔性曲面屏下前摄
  9. 曾比海底捞还牛,如今关店1200家!肯德基的猪队友,快被中国人抛弃了?
  10. 华为Mate40 RS保时捷设计推8+256GB版本:起售价便宜1000元