使用 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 來聯機

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