[root@CentOS ~]# vim /etc/sysconfig/network-scripts/ifcfg-tun0
DEVICE=tun0
BOOTPROTO=none
ONBOOT=yes
DEVICETYPE=tunnel
TYPE=GRE
PEER_INNER_IPADDR=172.16.1.2
PEER_OUTER_IPADDR=100.1.1.1
MY_INNER_IPADDR=172.16.1.1
MY_OUTER_IPADDR=200.1.1.1
[root@CentOS ~]# vim /etc/sysconfig/network-scripts/route-tun0
192.168.1.0/24 via 172.16.1.2
[root@CentOS ~]# ifup tun0
Iptables 配置
# 安装 iptables 管理服务
[root@CentOS ~]# yum install iptables-services
# 在 INPUT 方向要放行对端的公网地址
[root@CentOS ~]# iptables -I INPUT -s 100.1.1.1/32 -j ACCEPT
# 配置源地址转换
[root@CentOS ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT –to-source 200.1.1.1
# 端口映射
[root@CentOS ~]# iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp –dport 8080 -j DNAT –to-dest 192.168.1.10:8080
# 保存 iptables
[root@CentOS ~]# service iptables save
开启 ipv4 转发
[root@CentOS ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@CentOS ~]# sysctl -p
华为防火墙
本次以华为 USG6300E 系列防火墙为例:
配置接口,并添加到安全区域
interface Tunnel0
ip address 172.16.1.2 255.255.255.0
tunnel-protocol gre
source 100.1.1.1
destination 200.1.1.1
# 将接口添加到安全区域内
[USG6300E] firewall zone tunnel
firewall zone name tunnel
set priority 75
add interface Tunnel0
配置安全策略
在实际的实施中,可以将策略收紧一些,根据需求限制源和目的地址。
如果条件允许的话,可以先将默认安全策略设置为 permit,待调通之后,再修改安全策略:
security-policy
rule name tunnel_out
source-zone trust
destination-zone tunnel
action permit
rule name tunnel_in
source-zone tunnel
destination-zone trust
action permit
# 放行 tunnel 到 untrust 的流量
rule name tunnel_untrust
source-zone tunnel
destination-zone untrust
action permit
配置策略路由
[USG6300E]policy-based-route
#
policy-based-route
rule name PBR
source-zone trust
source-address 192.168.1.0 mask 255.255.255.0
action pbr egress-interface Tunnel0
配置 No-NAT
设置去往隧道的流量不使用源地址转换:
[USG6300E-policy-nat]dis th
nat-policy
rule name SNAT
source-zone tunnel
destination-zone untrust
source-address 192.168.1.0 mask 255.255.255.0
action no-nat
验证
主要有如下几个测试方法:
在 CentOS 或 防火墙 ping 对端的隧道地址;
使用 192.168.1.0/24 网段内的设备 traceroute 公网地址,查看经过的路径以确认是否经过隧道转发。