下午好。这是我家的网络图:
Internal
Interface
x.x.1.14 x.x.1.99
--------- --------- --------- ----------
| | | | | | | |
| Comp1 |---|Rasp Pi|---|Router |---|Internet|
| | | | | | | | |
--------- --------- | --------- ----------
x.x.0.123 | x.x.0.1 8.8.8.8
External |
Interface | ---------
| | |
|-| Comp2 |
| |
---------
x.x.0.135
我在家里连接了两个网络(一个 WiFi 和一个有线网络),在 Raspberry Pi 上的 Ubuntu 24.04.1 LTS 上运行 iptables。从 Comp1,我能够 ping Comp2 和互联网,但后来我在 Pi 上做了一些愚蠢的事情(更改了 root 密码并扔掉了便签),不得不重新设置我的 Pi。我重新设置了 Pi,使用相同的网络设置,现在我可以从 Comp1 再次 ping Comp2,但不能上网。我第一次尝试让 Pi 工作时输入了大量笔记,但到目前为止,我所做的一切都无法让我连接到互联网。以下是我迄今为止尝试过的列表:
没有
sudo iptables -t nat -A POSTROUTING -o 192.168.0.123 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
没有
sudo iptables -t nat -A POSTROUTING -o 192.168.0.123 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -j ACCEPT
没有
sudo iptables -t nat -A POSTROUTING -o 192.168.1.99 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
没有
sudo iptables -t nat -A POSTROUTING -o 192.168.1.99 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -j ACCEPT
没有
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
没有
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
没有
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
没有
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
我还在 Linux 机器上添加了到第二个网络的路由:
$ sudo ip route add 192.168.0.0/24 via 192.168.1.99
我尝试了翻转,因为第一次我犯了一个错误,翻转了我在互联网上找到的 IP 标签,结果成功了。那么,有人能看出我做错了什么吗?或者我遗漏了什么?
谢谢,
乔
感谢您的快速回复。好的,以下是信息:
Comp1-Linux ens160 是 192.168.1.14
Pi-Linux eth0 是 192.168.1.99 wlan0 是 192.168.0.123
Comp2-Windows 192.168.0.135
iptables-保存
# Generated by iptables-save v1.8.10 (nf_tables) on Tue Nov 26 12:54:31 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [204777:66752196]
:OUTPUT ACCEPT [0:0]
-A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
COMMIT
# Completed on Tue Nov 26 12:54:31 2024
# Generated by iptables-save v1.8.10 (nf_tables) on Tue Nov 26 12:54:31 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [117749:8274546]
-A POSTROUTING -o 192.168.0.123 -j MASQUERADE
-A POSTROUTING -o 192.168.0.123 -j MASQUERADE
COMMIT
# Completed on Tue Nov 26 12:54:31 2024
乔
sysctl -p 的输出如下:
jfxb@Pi5:~$ sudo sysctl -p
[sudo] password for jfxb:
net.ipv4.ip_forward = 1
jfxb@Pi5:~$
您错误地输入了nat表的 iptables 规则。在所有示例中,您都使用 IP 地址而不是接口名称作为
-o
选项。查看iptables(8)的手册页:
您的第一个例子输入错误,如下所示:
因此,将 IP 地址更改为接口名称。对于您的设置,连接到路由器的 IP 地址为 的接口
192.168.0.123
是wlan0
。根据
iptables-save
您在帖子中提供的输出,您对 INPUT、OUTPUT 和 FORWARD 链的默认策略是 ACCEPT。因此,您定义的 FORWARD 规则是不必要的:您的nat表中还有两条不正确的规则:
因此,在输入正确的nat规则之前,请刷新所有链:
为了使您的 iptables 规则在每次重启时都保持不变,您需要先安装
iptables-persistent
:然后,保存当前规则:
最后,看来您已经在内核中启用了 IP 转发,但我将在这里添加它以使其完整: