
1 前言
网络上有很多软路由,其实软路由可以使用Linux或unix系统做,本例使用CentOS 6.x来配置一款简单的软路由。
2 理论知识
2.1 DNAT
作用:重写数据包的目标地址 范例:路由器的内部服务器端口映射 链条:只能用于PREOUTING、OUTPUT链 常用参数: --to-destination #数据包转发目标地址
2.2 SNAT
作用:重写数据包的源IP地址 范例:多主机经过路由NAT上网 链条:只能用于POSTROUTING
2.3 PREOUTING
配合参数: PREOUTING -i #进站
2.4 POSTROUTING
POSTROUTING -o #出站
3 最佳实践
3.1 实践环境
hostname = router.cmdschool.org
interface_1 = eth0(WLAN)
ipaddress_1 = 192.168.0.250
interface_2 = eth1(LAN)
ipaddress_2 = 10.168.0.1/24
hostname = webserver.cmdschool.org
ipaddress=10.168.0.80
3.3 配置路由模式
3.3.1 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf
你需要确认该参数修改成功,
grep net.ipv4.ip_forward /etc/sysctl.conf
正常显示如下,
net.ipv4.ip_forward = 1
3.3.2 配置防火墙规则
vim /etc/sysconfig/iptables
修改配置如下,
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *nat :PREROUTING ACCEPT [2:80] :POSTROUTING ACCEPT [4:304] :OUTPUT ACCEPT [4:304] -A POSTROUTING -s 10.168.0.0/24 -o eth0 -j MASQUERADE COMMIT # Completed on Sat Nov 14 10:08:49 2015 # Generated by iptables-save v1.4.7 on Sat Nov 14 10:08:49 2015 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [209:32916] -A INPUT -i eth0 -p icmp -j ACCEPT -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i eth1 -j ACCEPT -A FORWARD -o lo -j ACCEPT -A FORWARD -o eth0 -j ACCEPT -A FORWARD -o eth1 -j ACCEPT COMMIT # Completed on Sat Nov 14 10:08:49 2015
你需要通过重启iptables服务是配置生效,
/etc/init.d/iptables restart
可通过以下命令查看重启后的配置,
iptables -L -v -n
3.2 配置端口映射(DNAT)
3.2.1 允许外部访问80端口
iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
设置即可生效,你需要铜鼓以下命令保存配置到磁盘,
/etc/init.d/iptables save
3.2.2 创建脚本生成端口映射规则
mkdir ~/scripts vim ~/scripts/nat.sh
创建一个生成映射规则的脚本(方便起见),
#!/bin/bash WAN_IP=192.168.0.250 #防火墙对外IP地址 WAN_PORT=80 #防火墙对外映射的端口 LAN_IP=10.168.0.1 #防火墙对内IP地址 SER_IP=10.168.0.80 #内部服务器的IP地址 SER_PORT=80 #内部服务器被映射的端口 echo iptables -t nat -A PREROUTING --dst $WAN_IP -p tcp --dport $WAN_PORT -j DNAT --to-destination $SER_IP:$SER_PORT echo iptables -t nat -A POSTROUTING -p tcp --dst $SER_IP --dport $SER_PORT -j SNAT --to-source $LAN_IP echo iptables -t nat -A OUTPUT --dst $WAN_IP -p tcp --dport $WAN_PORT -j DNAT --to-destination $SER_IP:$SER_PORT
执行生成映射规则的脚本,
sh ~/script/nat.sh
可见如下输出,
iptables -t nat -A PREROUTING --dst 192.168.0.250 -p tcp --dport 80 -j DNAT --to-destination 10.168.0.80:80 iptables -t nat -A POSTROUTING -p tcp --dst 10.168.0.80 --dport 80 -j SNAT --to-source 10.168.0.1 iptables -t nat -A OUTPUT --dst 192.168.0.250 -p tcp --dport 80 -j DNAT --to-destination 10.168.0.80:80
以上复制到shell中执行后,使用以下命令保存防火墙规则到磁盘,
/etc/init.d/iptables save
3.2.3 测试配置
telnet 192.168.0.250 80
3.3 配置DHCP服务
如果你需要为客户端分配IP地址,请参阅以下文档配置DHCP服务,
https://www.cmdschool.org/archives/4552
参考文献:
=============================
http://www.netfilter.org
http://jafy00.blog.51cto.com/2594646/651856
http://jingyan.baidu.com/article/aa6a2c143d84470d4c19c4cf.html
没有评论