Linux
使用 nftables 偽裝
我在 eth0 介面上有帶 2 個上行鏈路(調製解調器 1 和調製解調器 2)和 LAN 的 PC-1:
# ip -c -brief addr lo UNKNOWN 127.0.0.1/8 eth0 UP 192.168.0.7/24 modem2 UNKNOWN 10.73.15.79/27 modem1 UNKNOWN 10.176.229.31/26
(調製解調器 1 和調製解調器 2 的“未知”狀態似乎沒問題)。
我設置路由如下:
# ip -c rule 0: from all lookup local 32764: from 10.73.15.79 lookup 2 32765: from 10.176.229.31 lookup 1 32766: from all lookup main 32767: from all lookup default # ip -c route ls table main default nexthop via 10.176.229.32 dev modem1 weight 1 nexthop via 10.73.15.80 dev modem2 weight 1 10.73.15.64/27 dev modem2 proto kernel scope link src 10.73.15.79 10.176.229.0/26 dev modem1 proto kernel scope link src 10.176.229.31 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.7 # ip -c route ls table 1 default via 10.176.229.32 dev modem1 10.73.15.64/27 dev modem2 scope link 10.176.229.0/26 dev modem1 scope link src 10.176.229.31 127.0.0.0/8 dev lo scope link 192.168.0.0/24 dev eth0 scope link # ip -c route ls table 2 default via 10.73.15.80 dev modem2 10.73.15.64/27 dev modem2 scope link src 10.73.15.79 10.176.229.0/26 dev modem1 scope link 127.0.0.0/8 dev lo scope link 192.168.0.0/24 dev eth0 scope link
因此,在本地 PC-1 上,我可以訪問網際網路。
我在區域網路內也有 PC-2,想在 PC-1 上設置偽裝,為 PC-2 提供網際網路。
我正在嘗試以下 nftables 配置:
# nft list ruleset table ip filter { chain input { type filter hook input priority 0; policy accept; } chain forward { type filter hook forward priority 0; policy accept; } chain output { type filter hook output priority 0; policy accept; } } table ip nat { chain input { type nat hook input priority 0; policy accept; ip protocol icmp accept } chain prerouting { type nat hook prerouting priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; policy accept; ip saddr 192.168.0.0/24 oifname "modem*" masquerade } chain output { type nat hook output priority 0; policy accept; } }
但它不起作用。我嘗試了幾個不同版本的配置,但都沒有成功。如何為偽裝設置 nftables?
我還設置:
# sysctl -w net.ipv4.ip_forward="1" net.ipv4.ip_forward = 1
Linux 核心 4.19.0
編輯:
我已經在另一台 PC 上成功配置了帶有 nftables 的偽裝。我注意到的差異(我不知道它是否有意義):
在 PC-1 上:
# sudo iptables -S iptables: No chain/target/match by that name.
在另一台電腦上:
# sudo iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
所以,問題 -
IPV4_DEVCONF_FORWARDING
在eth0
界面上未設置。我在 -method 的幫助下設置了libnl
它rtnl_link_inet_set_conf
。編輯:
這是相同的選擇
sysctl net.ipv4.conf.eth0.forwarding
。感謝@AB