由于公司不同网段的区分,导致互访很不方便。别的网段的用户要访问我们的服务器,通过端口映射是比较方便的方式。
PC A: eth0  10.10.1.11,  eth1 192.168.0.11
PC B:    eth1  192.168.0.20

要使访问A的10.10.1.11:8000端口能访问到B的8000端口,通过iptables就能简单实现。命令如下:

iptables -t nat -A PREROUTING -d 10.10.1.11 -p tcp --dport 8000 -j DNAT --to-destination 192.168.0.20:8000
iptables -t nat -A POSTROUTING -d 192.168.0.20 -p tcp --dport 8000 -j SNAT --to 192.168.0.11
iptables -A FORWARD -o eth1 -d 192.168.0.20 -p tcp --dport 8000 -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.0.20 -p tcp --sport 8000 -j ACCEPT

其中前面两条是必须的,如果你的iptables还有其他规则,或者默认策略为drop,最好加上后面两条。
还有一个不得不改的地方是 /etc/sysctl.conf,将net.ipv4.ip_forward的值改为1。
为了使设置生效,可以使用 sysctl -p 命令刷新。有些教程说要重启系统才可以,其实就是没用这个命令。还有些教程说要修改 /proc/sys/net/ipv4/ip_forward,其实和sysctl -p的作用是一样的。

————————————华丽的分割线——————————————

除了用iptables外,还可以用软件rinetd。

rinetd的下载地址: http://www.boutell.com/rinetd/http/rinetd.tar.gz

下载之后解压:tar -zxvf rinetd.tar.gz,之后就是简单的make, make install。安装时会提示没有/usr/man/ 文件夹,手动创建一个再试即可。在centos5下编译会提示警告,可以无视。

编辑/etc/rinetd.conf,按如下格式添加
绑定地址 绑定端口 目的地址 目的端口
例如
10.10.1.11 8000 192.168.0.20 8000
如果要绑定主机上的所有IP,可以用0.0.0.0代替。
完成后启动rinetd。
rinetd -c /etc/rinetd.conf
关闭rinetd
pkill rinetd

  One Response to “利用iptables进行端口映射”

  1. 搞不懂。

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2012 一起去看海 Suffusion theme by Sayontan Sinha