我有一台 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)。
您的iptables
MASQUERADE 规则可能应该更具体。它可能会匹配不应进行 NAT 的数据包。我会为内部网络添加源匹配,如下所示:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth3 -j MASQUERADE
只要 FORWARD 链上的策略是 ACCEPT(这是默认设置),则不需要 FORWARD 链上的 ACCEPT 规则。