没有网络管理器的 Internet 连接共享

Big*_*uge 6 iptables internet interface dnsmasq ip-forward

我按照这些说明设置了与 iptables 的共享互联网连接。具体来说,我:

  1. 在 /etc/network/interfaces 中为我的第二个 NIC 添加了一个网络接口,如下所示:

    auto eth1

    iface eth1 inet static

    address 192.168.1.100

    netmask 255.255.255.0

  2. 准确输入这些规则:

    sudo iptables -A FORWARD -o eth0 -i eth1 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT

    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    sudo iptables -t nat -F POSTROUTING

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  3. 将我的规则保存到一个文件并将其添加到 /etc/rc.local

  4. 通过将 /proc/sys/net/ipv4/ip_forward 的值更改为 1 来启用 IP 转发

  5. 取消注释net.ipv4.ip_forward=1/etc/sysctl.conf 中的行

  6. 重新启动

现在,当我将笔记本电脑插入 eth1 接口时,我获得了一个 IP 地址并可以 ping 网关,但除此之外我无法访问任何内容。即,我无法 ping 8.8.8.8。

如果相关,我的另一个接口是 PPPoE 连接。它看起来像这样:

auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up
provider dsl-provider

auto eth0
iface eth0 inet manual
Run Code Online (Sandbox Code Playgroud)

我想问题可能是 dnsmasq 没有分配名称服务器,所以我dns-nameservers 8.8.8.8 8.8.8.4在/etc/network/interfaces.conf 中的两个接口下都添加了。这没有帮助,所以我尝试将名称服务器添加到 /etc/resolv.conf。没有帮助。最后,我尝试将它们添加到 /etc/dnsmasq.conf:

no-resolv
server=8.8.8.8
server=8.8.4.4
Run Code Online (Sandbox Code Playgroud)

这也没有帮助。但是,我不确定我的问题是否真的与名称服务器有关,或者这是否只是过时、毫无价值的文档的另一种情况。

我曾经能够在网络管理器中使用它,但我不喜欢网络管理器不让我分配 DHCP 范围的方式。所以我想避免回到那个问题。

Big*_*uge 2

固定的:

sudo iptables -A FORWARD -o ppp0 -i eth1 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

再次感谢 #openwrt 的 g0rdon :)