Ubuntu 伺服器作為私有 NAT 路由器和公共路由器
我正在嘗試做一些我以前從未嘗試過的事情。我有一台安裝了 Ubuntu 的 Dell PowerEdge 540。我安裝了 Comcast Business line,並具有以下物理網路配置:
Ubuntu Server 20.04.3 LTS enp10s0f0: (10gb SFP+ Add-on card) IPv4: 5*.2*.204.214 Subnet: 255.255.255.252 Gateway: 5*.2*.204.213 enp10s0f1: (10gb SFP+ Add-on card) IPv4: 5*.2*.205.1 Subnet: 255.255.255.0 eno1: (1gb copper ethernet) IPv4: 10.0.0.0 Subnet: 255.0.0.0
這是ip addr的輸出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:1e:c9:b5:b2:3c brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/8 brd 10.255.255.255 scope global eno1 valid_lft forever preferred_lft forever inet6 ****::***:c9ff:feb5:b23c/64 scope link valid_lft forever preferred_lft forever 3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:1e:c9:b5:b2:3e brd ff:ff:ff:ff:ff:ff 4: enp12s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:10:18:0d:a3:7e brd ff:ff:ff:ff:ff:ff 5: enp10s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether f4:e9:d4:92:9d:d0 brd ff:ff:ff:ff:ff:ff inet 5*.2*.204.214/30 brd 5*.2*.204.215 scope global enp10s0f0 valid_lft forever preferred_lft forever inet6 fe80::f6e9:d4ff:fe92:9dd0/64 scope link valid_lft forever preferred_lft forever 6: enp10s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether f4:e9:d4:92:9d:d2 brd ff:ff:ff:ff:ff:ff inet 5*.2*.205.1/24 brd 5*.2*.205.255 scope global enp10s0f1 valid_lft forever preferred_lft forever inet6 ****::****:d4ff:fe92:9dd2/64 scope link valid_lft forever preferred_lft forever
我配置了以下 ip 路由:
default via 5*.2*.204.213 dev enp10s0f0 proto static 10.0.0.0/8 dev eno1 proto kernel scope link src 10.0.0.1 5*.2*.204.212/30 dev enp10s0f0 proto kernel scope link src 5*.2*.204.214 5*.2*.205.0/24 dev enp10s0f1 proto kernel scope link src 5*.2*.205.1
以下內容保存在我的*/etc/rc.local*文件中:
#!/bin/sh -e iptables --flush iptables --table nat --flush iptables --delete-chain iptables --table nat --delete-chain iptables -F iptables -X ###################### Enable Nat ############################ sudo echo "1" > /proc/sys/net/ipv4/ip_forward #################### Enable Nat for internal ########################### iptables -t nat -A POSTROUTING -o enp10s0f0 -j MASQUERADE #iptables -t nat -A POSTROUTING -o enp12s0f1 -j MASQUERADE ################### Enable Log ######################## #iptables -A OUTPUT -j LOG #iptables -A INPUT -j LOG #iptables -A FORWARD -j LOG ############# Allow by default ##################### iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT ############################ Allow Incoming connection ############################ iptables -A INPUT -m conntrack --ctstate "ESTABLISHED,RELATED" -j ACCEPT ################################## Allow outgoing connection ###################### iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT ######################## allow internal to external iptables -A FORWARD -i eno1 -m state "ESTABLISHED,RELATED" -j ACCEPT #iptables -A FORWARD -i eno1 -o enp12s0f1 -m state "ESTABLISHED,RELATED" -j ACCEPT ###iptables -A FORWARD -i eno1 -o enp10s0f1 -j ACCEPT iptables -A FORWARD -i eno1 -o enp10s0f1 -j ACCEPT #iptables -A FORWARD -i eno1 -o enp12s0f0 -j ACCEPT #iptables -A FORWARD -i enp10s0f1 -o enp10s0f0 -j ACCEPT #iptables -A FORWARD -i enp10s0f0 -o enp12s0f1 -j ACCEPT exit 0
一張網路圖:
您可能會注意到,我花了很多時間線上閱讀解決此問題的最佳方法是什麼,其中大部分內容已被註釋掉。我想,我只需要在eno1介面上進行 NAT。但是,既然是 linux,我需要iptables來做非 NAT 路由嗎?我試過禁用它,公共網路根本無法工作。
即使我讓一件事起作用,它最終也會破壞另一件事。自從我上思科課程以來已經有好幾年了,我不習慣感到如此無知。我真的希望有人可以幫助我找出實現這一點的最佳方法,或者可能發現我所做的任何導致錯誤的錯誤。
我認為您的 ISP 設置了通往您的網路的
5*.2*.205.0/24
路由5*.2*.204.214
。讓我們假設以下狀態:Netfilter 處於預設狀態(
iptables-save
不顯示任何規則,所有策略都是ACCEPT
)。您的公共網路5*.2*.205.0/24
工作正常,主機具有預設網關5*.2*.205.1
。由於未設置 NAT,因此專用網路10.0.0.0/8
(帶有 gateway10.0.0.1
)不起作用。此外,我希望10.0.0.0/8
和中的主機5*.2*.205.0/24
能夠看到並相互交流。你幾乎不需要做任何事情來實現這一點。只需使用網路遮罩設置所有 IP 並在核心中啟用 IP 轉發(例如
net.ipv4.ip_forward=1
)。你的路由表應該和你已經擁有的一樣。為了
10.0.0.0/8
向 Internet 工作,您只需添加以下規則:iptables -t nat -A POSTROUTING -o enp10s0f0 -s 10.0.0.0/8 -j MASQUERADE
它將為進入野外的“灰色”地址進行 NAT。您可以替換
-j MASQUERADE
為-j SNAT --to-source 5*.2*.205.1
(分配給 的地址enp10s0f1
)或5*.2*.204.214
.如果您想將網路
5*.2*.205.0/24
視為類似於 Internet,您可以添加另一個 NAT 規則並轉換連接到它的連接10.0.0.0/8
。除了傳出介面過濾器之外,這另一個規則將與第一個規則相同-o enp10s0f1
。但是不使用 NAT 可能會很有用,特別是如果您控製網路並希望其中的主機看到直接10.0.0.0/8
地址而不是將它們隱藏在網關地址下。