我有一個帶有 2 個 NIC 的網關“X”
enp0s3 (192.168.0.100) 連接到 192.168.0.0/24(假設這是一個 WAN 網路)
enp0s8 (172.16.0.1) 連接到 172.16.0.0/24(大概是 LAN 網路)
我使用 nftables 創建了一個 NAT 連接,以允許 LAN (172.16.0.0/24) 中的主機透過網關「X」瀏覽互聯網。
/etc/nftables/nftables_firewall
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state {established, related} accept
ct state invalid drop
iifname lo accept
iifname enp0s8 accept
ip protocol icmp accept
reject
}
chain forward {
type filter hook forward priority 0;
oifname enp0s3 accept
iifname enp0s3 ct state related, established accept
iifname enp0s3 drop
}
chain output {
type filter hook output priority 0;
}
}
/etc/nftables/nftables_nat
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
}
chain postrouting {
type nat hook postrouting priority 0;
oifname enp0s3 masquerade
}
}
現在,我需要一台主機(192.168.0.101),它是來自 WAN(192.168.0.0/24 網路)的筆記型電腦,透過網關「X」存取 LAN(172.16.0.0/24 網路)中的主機。即我需要設定從WAN中的該主機(192.168.0.101)到LAN(172.16.0.0/24網路)的靜態路由。
這是我嘗試透過其 wlo1 介面在 192.168.0.0/24 網路上的筆記型電腦上新增的靜態路由
ip route add 172.16.0.0/24 via 192.168.0.100 dev wlo1
網關防火牆中的規則會阻止這些封包進入 172.16.0.0/24 網路。
如何在我的網關上允許此操作?
我知道防火牆規則正在丟棄資料包,因為
測試用
ping 172.16.0.2
運行時來自 192.168.0.101
tcpdump -lnni any src 192.168.0.101
來自網關“X”的回复
11:41:53.240815 IP 192.168.0.101 > 172.16.0.2: ICMP echo request, id 8, seq 1, length 64
11:41:54.243947 IP 192.168.0.101 > 172.16.0.2: ICMP echo request, id 8, seq 2, length 64
11:41:58.247687 ARP, Request who-has 192.168.0.100 tell 192.168.0.101, length 46
答案1
你的二規則集有一個缺陷:
flush ruleset
如果兩者按順序執行,因為flush ruleset
只剩下最後一個。
每個flush ruleset
應該分別改為:
table inet filter
delete table inet filter
和:
table ip nat
delete table ip nat
每次都獲得冪等表定義,該定義在第一次使用時不會失敗,也不會重複自身,也不會影響其他桌子。
現在關於這個問題,就像插入一個轉送規則以在正確的位置允許這樣做一樣簡單:在刪除規則之前,因此:
# nft insert rule inet filter forward index 2 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
要不然:
# nft add rule inet filter forward index 1 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
去測試,
或直接透過在正確的位置編輯規則集來保留它:
...
iifname enp0s3 ct state related, established accept
ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
iifname enp0s3 drop
...
為了額外的安全性,可以選擇新增該規則iifname enp0s3
(=> )。iifname enp0s3 ip saddr 192.168.0.101 ip daddr 172.16.0.0/24 accept
返回流量已由有狀態規則 ( ... ct state related, established ...
) 處理。