將Linux做成路由器

FuShudi發表於2024-07-07

將Linux做成一個路由器

主機名 IP
oe01 192.168.200.170(外網)
192.168.100.164(內網)
oe02 192.168.100.162(內網)
透過這個規劃表,oe02這個主機是隻有一個內網網路卡的,無法上網,我們需要將oe01這個Linux做成一個路由器,也就是從內網網路卡收到的流量轉發到外網網路卡,然後出去路由
方法有2種,一種是透過iptables,另一種是透過firewalld

1. oe02測試網路連通性

[root@oe02 ~]# ping www.baidu.com
ping: qq.com: Name or service not known

現在是不通外網的,我們來配只oe01

2. 配置oe01使用firewalld

需要開啟核心引數net.ipv4.ip_forward

[root@oe01 ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@oe01 ~]# sysctl -p
net.ipv4.ip_forward = 1

ipv4的轉發就開啟了,然後我們還需要開啟一個地址偽裝

[root@oe01 ~]# firewall-cmd --add-masquerade --permanent 
success
[root@oe01 ~]# firewall-cmd --reload
success

這些命令執行報錯檢查你的防火牆是否開啟,如果沒有開啟是需要開啟的

3. oe02配置網路

因為我們現在已經將oe01做成了一個路由器,所以我們的oe01就是oe02的閘道器

# 刪除原先配置
[root@oe02 ~]# nmcli connection delete ens33 
Connection 'ens33' (ff2e31ed-ae33-4f04-9a19-7af06f9fe623) successfully deleted.
# 配置新的網路卡
[root@oe02 ~]# nmcli connection add ens33 ipv4.addresses 192.168.100.162/24 ipv4.dns 119.29.29.29 ipv4.gateway 192.168.100.164 autoconnect yes type ethernet
[root@oe02 ~]# nmcli connection up ens33 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

現在我們的oe02的閘道器就指向了oe01的192.168.100.164這個內網網路卡,然後我們測試現在oe02的網路

[root@oe02 ~]# ping qq.com
PING qq.com (123.150.76.218) 56(84) bytes of data.
64 bytes from 123.150.76.218 (123.150.76.218): icmp_seq=1 ttl=127 time=16.9 ms

oe02的網路現在就通了
這種方式是透過防火牆來做的,但是一般情況下防火牆都是會被關閉的,所以接下來我們透過iptables來做

3. iptables配置

# 在oe01上操作
[root@oe01 ~]# nmcli connection show
NAME     UUID                                  TYPE      DEVICE  
ens33    ff2e31ed-ae33-4f04-9a19-7af06f9fe623  ethernet  ens33   
ens34    e2f6a41b-47e7-4706-adab-2b1b46a84149  ethernet  ens34

我們的ens33是一個外網網路卡,ens34是一個網路卡網路卡,我們希望的是把ens34上的流量轉發到ens33上

# 先關閉防火牆,防火牆關掉之後你的oe02就上不了網了,可以自己試試
[root@oe01 ~]# systemctl stop firewalld
# 允許從 ens34 介面進入並從 ens33 介面出去的流量
iptables -A FORWARD -i ens34 -o ens33 -j ACCEPT
# 設定 NAT 規則,讓流量從 ens33 出去時進行地址轉換
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE

這樣我們的iptables也配置完了,測試一下

[root@oe02 ~]# ping qq.com
PING qq.com (112.60.14.252) 56(84) bytes of data.
64 bytes from 112.60.14.252 (112.60.14.252): icmp_seq=1 ttl=127 time=13.2 ms
64 bytes from 112.60.14.252 (112.60.14.252): icmp_seq=2 ttl=127 time=14.0 ms

這樣我們的實驗就搞定了

相關文章