如何将CentOS 6.x配置为路由?

RHEL-Like

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

没有评论

发表回复

RHEL-Like
如何配置rsyncd服务?

1 前言 一个问题,一篇文章,一出故事。 由于笔者想实现文件通过rsync自动传输,但是又不想使用o …

RHEL-Like
如何用pam_google_authenticator认证模块实现SSH 2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想开启2FA以便增强SSH服务的安全性,于是便整理此文 …

RHEL-Like
如何升级RHEL clamav杀毒?

1 前言 一个问题,一篇文章,一出故事。 笔者需要卸载旧的病毒软件,然后更新rpm包的病毒软件,于是 …