Linux网络转发和端口映射的笔记 | 迟思堂工作室
A-A+

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

2014-10-20 13:25 GNU/Linux系统 暂无评论 阅读 8,776 次

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



如果本文对阁下有帮助,不妨赞助笔者以输出更多好文章,谢谢!
donate




给我留言