设置 Ubuntu / Linux 路由器时遇到的问题

设置 Ubuntu / Linux 路由器时遇到的问题

我有一台 Ubuntu Linux 机器,我想把它变成路由器。它有 2 个 NIC,位于 i) 有线调制解调器(互联网)和 ii) 无线路由器(服务于内部网络)之间。通过这个简单的设置,我能够获得一些距离,但似乎在下面绊倒了。

(the net) cable modem   ->  (eth3) ubuntu box (eth1)    ->  linksys wifi router 


[ok] ubuntu dhcp 客户端(使用 eth3)可以连接到调制解调器并上网
[ok] ubuntu 可以使用命令静态分配 IP 给内部 NIC(eth1):

sudo ifconfig eth1 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 

[ok] 可以安装并运行 DHCP 服务器。客户端机器可以获取 IP 并 ping ubuntu。


在这之后,事情开始变得糟糕:

[x] 一段时间后,ubuntu eth3 保留了其 IP 地址,但无法再连接到网络。重新启动(再次调用“dhclient”)让我重新上线。

[x] ubuntu eth1 要么 i) 当客户端请求新的 IP 租约时丢失 192.168.1.1 IP 地址,要么 ii) 被分配 192.168.1.100(“/etc/dhcp3/dhcpd.conf”中网络范围的起始 - 见下文)。我如何保持这个值稳定?


/etc/default/dhcp3 服务器

INTERFACES="eth1" 


/etc/dhcp3/dhcpd.conf

ddns-update-style none; 
log-facility local7; 
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  option domain-name-servers 64.71.255.198;
  option domain-name "frye.com";
  option routers 192.168.1.1;
  option broadcast-address 192.168.0.255;
  default-lease-time 600;
  max-lease-time 7200;
}

[x] 我在将 ubuntu 盒子 NAT 数据包从客户端机器 (eth1) 发送到网络 (eth3) 时遇到了问题。我尝试使用以下命令设置表格(我也尝试在命令中反转 NIC)。'/etc/sysctl.conf'(以及相应的 '/proc/sys/net/ipv4/ip_forward')的预期值为 '1'。将数据包从 eth1 转发到 eth3 的正确方法是什么?

sudo iptables --table nat --append POSTROUTING --out-interface eth3 -j MASQUERADE
sudo iptables --append FORWARD --in-interface eth1 -j ACCEPT



我确信在这两点上我都遗漏了一些配置魔法。

感谢你的帮助,
蒂姆

答案1

一些随机提示:

不要ifconfig直接使用 来配置你的网卡。相反,将配置放入 中/etc/network/interfaces,例如:

auto lo
iface lo inet loopback

auto eth3
iface eth3 inet dhcp

auto eth1
iface eth1 inet static
    address 192.168.1.1
    netmask 255.255.255.0

您的/etc/dhcp3/dhcpd.conf输入似乎有拼写错误broadcast-address(应为 192.168.1.255)。

您的iptablesMASQUERADE 规则可能应该更具体。它可能会匹配不应进行 NAT 的数据包。我会为内部网络添加源匹配,如下所示:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth3 -j MASQUERADE

只要 FORWARD 链上的策略是 ACCEPT(这是默认设置),则不需要 FORWARD 链上的 ACCEPT 规则。

相关内容