Linux网络转发和端口映射的笔记

最近研究了一下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日中午

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值