使用 openEuler 架设网关

环境

操作系统:openEuler 开放欧拉 22.03 LTS

适用架构:ARM64(鲲鹏 920 x8、飞腾 FT-2000/4)、AMD64(海光、兆芯)

 

前言

从一个局域网到另一个局域网,或者广域网,或者互联网,通常需要一个出口,比如网关(GateWay)或代理(Proxy)。网关的工作模式又分为转发(NAT)和路由(Router)。如何让优麒麟来承担这个网关的工作呢?跟我来……

 

查看网络基本信息

查看网卡配置文件。

ls /etc/sysconfig/network-scripts/

网卡1:ifcfg-ens160(外网)

网卡2:ifcfg-ens192(内网)

查看 IP。

ip a

地址1:local,127.0.0.1/8

地址2:ens160,172.16.0.1/21

地址3:ens192,192.168.0.1/21

 

启用 IPv4 数据包转发

编辑 sysctl.conf 文件

sudo nano /etc/sysctl.conf

sudo nano /etc/sysctl.d/99-sysctl.conf

设置   net.ipv4.ip_forward=1。

推出编辑后,应用 sysctl 的配置。

sudo sysctl -p

 

查看 iptables 现有规则

在配置 iptables 之前,你通常需要用查看有无现存规则,

sudo iptables-save

或者

sudo iptables --list

根据需要,选择是否删除现有的 iptables 规则。

sudo iptables --flush
或者
sudo iptables -F

验证规则是不是真的清空了。

sudo iptables -t NAT -F

 

通过 iptables 启用 NAT

如果将 192.168.0.1 转换为 172.16.0.1,iptables 命令如下:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.1/21 -o ens160 -j SNAT --to-source 172.16.0.1

各个参数的说明。

sudo iptables -t nat -A POSTROUTING -s 192.168.0.1/21(内网网段) -o ens160(外网网卡) -j SNAT --to-source 172.16.0.1(外网 IP)

外网 IP 地址不稳定的情况即可使用 MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网 IP 地址

sudo iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -j MASQUERADE

或者简写为

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

这条命令将启用所有通讯的 NAT。

 

设置开机启用 iptables 规则

iptables 命令行在系统重启后会失效。但是有很多方法让命令行在系统重启后持续有效。

启用 iptables 服务并设置为系统引导后自动启动。

sudo systemctl enable iptables --now

保存 iptables 规则。

sudo service iptables save
或者
su
/usr/sbin/iptables-save > /etc/sysconfig/iptables

重启 iptables 服务。

 

sudo service iptables restart
或者
sudo systemctl restart iptables

查看当前规则。

sudo cat  /etc/sysconfig/iptables

 

配置客户端

如果一切顺利,我们就完成了开放欧拉中的 Linux 网关构建工作。 根据拓扑结构,客户端使用 172.16.8.0/24 网络地址。因此,相应的配置客户端中的网关地址就可以了。

尝试 ping 或打开你的浏览器开始浏览互联网,看看它是否工作。

 

防火墙

如果发现DNS无法解析,请输入下列命令 防火墙的问题 不用想。先都通过在根据配置更改。

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P INPUT ACCEPT

/etc/rc.d/init.d/iptables save

service iptables restart

 

iptables -A INPUT -i lo -j ACCEPT

iptables -A FORWARD -p tcp --dport 80 -j ACCEPT

iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

iptables -A FORWARD -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -p tcp --dport 25 -j ACCEPT

iptables -A FORWARD -p tcp --dport 110 -j ACCEPT

iptables -A FORWARD -p udp --dport 110 -j ACCEPT

iptables -A FORWARD -p tcp --dport 143 -j ACCEPT

iptables -A FORWARD -p udp --dport 143 -j ACCEPT

iptables -A FORWARD -p tcp --dport 993 -j ACCEPT

iptables -A FORWARD -p udp --dport 993 -j ACCEPT

iptables -A FORWARD -p tcp --dport 995 -j ACCEPT

iptables -A FORWARD -p udp --dport 995 -j ACCEPT

service iptables save

service iptables restart

 

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A FORWARD -p tcp -j ACCEPT

iptables -A FORWARD -p udp -j ACCEPT

iptables -A FORWARD -p tcp --dport 1:65534 -j ACCEPT

service iptables save

service iptables restart

 

sysctl -p
service network restart
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.*.*/24 -o eth0 -j SNAT --to ip地址。
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT
service iptables save
service iptables restart

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -p tcp --dport 1:65534 -j ACCEPT
iptables -A FORWARD -p udp --dport 1:65534 -j ACCEPT
service iptables save
service iptables restart

 

默认为:

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT   ACCEPT

会影响许多功能的使用。

 

就是ip 跳板,从一个ip 调到你想给大家使用的机器(屏蔽你不想直接用的口)端口镜像

 

iptables -t nat -A PREROUTING -d x.x.x.x(公网IP) -p tcp --dport 2200(端口号) -j DNAT --to 192.168.3.202:22(内网ip:内网IP端口)NAT默认路由

ip route add 192.168.6.0/24  via 192.168.11.2

或者 加一条网关 默认给你 想跳的ip 网段ip route add  -net 192.168.6.0/24  gw 192.168.11.1

dev eth0  (那个网卡必须能与你想跳的网络通)  比如 192.168.11.0/24  与 192.168.6.0/24 互通。
 

说了这么多大家 新手很糊涂是吧呵呵。下面我们来实践一下吧 。

 

1.2 修改主机名:

1.2.1 /etc/sysconfig/network
1.2.2 /etc/hosts

1.3 网卡设置
1.3.1 单个IP /etc/sysconfig/network-scripts/ifcfg-eth0
1.3.2 IP段
#cd  /etc/sysconfig/network-scripts/
#cp -a ifcfg-eth0  ifcfg-eth0-range0
#vi ifcfg-eth0-range0
DEVICE=eth0-range0
IPADDR_START=192.168.136.2          #设置地址段的起始IP
IPADDR_END=192.168.136.100          #设置地址段的结束IP
GATEWAY=192.168.136.1
NETMASK=255.255.255.0
CLONENUM_START=”20”            #设置虚拟接口(CLONE–克隆)的起始“编号”在本例中,将从20开始,21,22,23……
NO_ALIASROUTING=yes               #该选项可以设置在主配置文件中(ifcfg-eth0)
#虚拟接口可以继承主配置文件中的设置,其作用是避免虚拟接口在从新定义路由信息,导致路由访问缓慢的问题。


1.2.3 命令方式
ip addr add 192.168.136.0/24 dev $OUTGOING

1.4 路由设置
1.4.1
#vi /etc/sysconfig/static-routes
eth0(设备名) net(网络地址) 192.168.0.0 (子网)netmask 255.255.255.0 (网关地址)gw 192.168.0.1
a. /usr/sysconfig/network-scripts/route-eth0
10.0.2.0/24 via 192.168.0.144
10.0.3.0/24 via 192.168.0.144
10.0.4.0/24 via 192.168.0.144
1.4.2 给系统主路由表配置网关,这个网关是电信的网关
ip route add 0/0 via 22.22.22.1
1.4.3 添加路由规则,让所有通向网通的数据查询标示为11的路由表,增加一个网通提供的默认网关。
ip route add 0/0 via 11.11.11.1 table 11
ip rule add to 60.0.0.0/13 table 11
ip rule add to 60.8.0.0/15 table 11
ip rule add to 60.10.0.0/16 table 11
要注意的是,在配置网卡的时候,先不要配置网关,不要使用老的ifconfig命令来配置网关,而要使用iproute2来配置网关,否则会造成冲突,或者 使用 ip route replace 命令来替换

ip route add 命令。


1.6 resolv.conf
nameserver 10.0.0.1

2. iptables配置
2.1 iptables初始化
iptables -t nat -F
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -N NEWCONN
2.2 NAT转换
2.2.1 首先将从两个WAN口出去的数据包进行IP伪装masquerade,主要是不让对面知道你来自于哪里。
/sbin/iptables -t nat -A postrouting -o eth1 -j masquerade
/sbin/iptables -t nat -A postrouting -o eth2 -j masquerade
2.1.2 SNAT 转换网络。
iptables -t nat -A POSTROUTING -s 内部IP地址/子网 -o $OUTGOING -j SNAT --to $IPPOOL
2.1.3 一个网段的电信网通自动切换
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d $电信ip -j SNAT --to 222.168.1.3
***
***
***
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 218.62.3.3
2.1.4 访问222.222.5.0/15和222.240.0.0/13走电信,其他默认网通
# echo "200 DIANXIN" >> /etc/iproute2/rt_table(这个是添加到文件,执行一次即可)
# ip route replace default via 222.168.1.2 table DIANXIN
# ip rule add fwmark 1 table DIANXIN(这个注意顺序,用ip rule可以查看)
# iptables -t nat -F
# iptables -t mangle -F
# iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 222.222.5.0/15 -j MARK --set-mark 1
# iptables -t mangle -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 222.240.0.0/13 -j MARK --set-mark 1
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 222.222.5.0/15 -j SNAT --to $DIANXIN
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 222.240.0.0/13 -j SNAT --to $DIANXIN
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to $接网通线路网卡的地址
# ip route flush cache

2.1.6 添加相似路由
if [ "$ALLOW_ACCESS_CLIENT" != "" ] ; then
   for LAN in ${ALLOW_ACCESS_CLIENT}; do
   {
       iptables -A FORWARD -p tcp -m multiport -s ${LAN} -o $ETH_WAN --dport $PORT -j ACCEPT
       iptables -A FORWARD -p udp -m multiport -s ${LAN} -o $ETH_WAN --dport $PORT -j ACCEPT
       iptables -A FORWARD -p tcp -m multiport -i $ETH_WAN --sport $PORT -j ACCEPT
       iptables -A FORWARD -p udp -m multiport -i $ETH_WAN --sport $PORT -j ACCEPT
   }
   done
fi

2.3 保存
iptables-save -c >/etc/sysconfig/iptables

 

NAT 原理

NAT (Network AddressTranslation 网络地址转换)

首先说说局域网内封包的传送,

1. 先经过 NAT table 的 PREROUTING 链;

2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;

3. 再经过 Filter table 的 FORWARD 链;

4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。

NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与 POSTROUTING。 那这两条链重要功能在于修改 IP,而这两条链修改的 IP 又是不一样的,POSTROUTING 在修改来源 IP,PREROUTING 则在修改目标 IP 。由于修改的 IP 不一样,所以就称为来源 NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。

SNAT 即源地址转换,能够让多个内网用户通过一个外网地址上网,解决了 IP 资源匮乏的问题。一个无线路由器也就使用此技术。

SNAT 封包传送示意图

由上图可知,需要将 192.168.10.10 转换为 111.196.211.212,iptables 命令如下:

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

外网 IP 地址不稳定的情况即可使用 MASQUERADE (动态伪装), 能够自动的寻找外网地址并改为当前正确的外网 IP 地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

 

DNAT 即目地地址转换,则能够让外网用户访问局域网内不同的服务器。(相当于 SNAT 的反向代理)

DNAT 封包传送示意图

 

由上图可知,目标地址 192.168.10.6 在路由前就转换成 61.240.149.149,需在网关上运行 iptables 命令如下:

iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80

eth1 网口传入,且想要使用 port 80 的服务时,将该封包重新传导到 192.168.1.210:80 的 IP 及 port 上面,可以同时修改 IP 与 port。此为地址映射与端口转换。

 

还可以使用 REDIRECT 单独进行端口转换

例:将 80 端口的封包转递到 8080 端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

# 使用 8080 这个 port 来启动 WWW ,但是别人都以 80 来联机

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章