如何将 Linux 服务器设置为路由器

如何将 Linux 服务器设置为路由器

动机:

出于以下几个原因,我想使用 Linux 服务器而不是普通的无线路由器

  1. 我想学习如何在Linux上设置更完整的服务器
  2. 我不想使用调制解调器、连接路由器、连接网络交换机
  3. 我厌倦了每隔 10 天就必须拔掉路由器的电源,因为它总是挂起
  4. 我已经厌倦了购买路由器,结果却发现它们缺少一些关键功能,例如端口转发或静态 IP 寻址 (dhcp)

设置:

最终,连接将进入调制解调器,并通过 直接进入我的服务器eth0,然后eth1输出到网络交换机,所有其他客户端计算机将通过以太网电缆连接到该交换机(暂时忘记无线)。但是,目前我在办公楼里,我的连接进入调制解调器,进入路由器,进入网络交换机,然后进入如上所述eth0

当前教程:

我看了一些教程(Ubuntu 教程是最好的一个),并且我在这里查看了一些路由器问题(即。这个),但它们都掩盖了几个关键概念,例如:

  • 与有什么eth1关系eth0/etc/network/interfaces我是否必须告诉用作eth1(通常它是实际的物理路由器地址)?eth0network
  • 我是否需要做什么来指示eth1将进入的互联网eth0传递给网络交换机中需要它的人?

当前方法:

这是我/etc/network/interfaces在服务器上的文件:

iface lo inet loopback

auto eth0
   iface eth0 inet static
   address 192.168.1.70
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8

auto eth1
   # iface eth1 inet dhcp
   iface eth1 inet static
   address 192.168.7.0
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0

ifconfig告诉我两个网卡工作正常:

eth0      Link encap:Ethernet  HWaddr 20:cf:30:55:a0:5f  
          inet addr:192.168.1.70  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::22cf:30ff:fe55:a05f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11297 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16639 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:948633 (948.6 KB)  TX bytes:1274685 (1.2 MB)

eth1      Link encap:Ethernet  HWaddr 00:11:95:f7:f4:6d  
          inet addr:192.168.7.0  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::211:95ff:fef7:f46d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3231 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:29934 (29.9 KB)  TX bytes:213055 (213.0 KB)
          Interrupt:21 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:5348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5348 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:470737 (470.7 KB)  TX bytes:470737 (470.7 KB)

wlan0     Link encap:Ethernet  HWaddr bc:f6:85:f8:70:5c  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

route -n returns服务器上的内容如下:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.7.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

然后在客户端我有

auto lo
iface lo inet loopback
iface eth0 inet dhcp

但它没有被分配 IP 地址。

编辑:这是 isc-dhcp-server 配置文件,/etc/dhcp3/dhcpd.con我大部分内容都从中复制而来本网站

# Sample /etc/dhcpd.conf                                                                                                                                                  
# (add your comments here) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.example";

subnet 192.168.7.0 netmask 255.255.255.0 {
   range 192.168.7.10 192.168.7.25;
}  

编辑:输出sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere             LOG level warning

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

问题:

在这个设置中我缺少哪些关键步骤/组件?

答案1

我必须像开膛手杰克一样离开,因为你缺少几样东西:

  1. 如果您的客户端将使用 DHCP 来获取 IP,则您需要一个 DHCP 服务器。

    iface eth0 inet dhcp

    在客户端中,这表示他们将从 DHCP 服务器获取其 IP,如果您没有设置 DHCP 服务器,则您应该使用固定 IP 或安装 DHCP 服务器。

  2. 您缺少在客户端中配置的 DNS 服务器。这可能是由于缺少 DHCP 服务器,也可能是您希望为整个网络使用本地 DNS 服务器。

  3. 你没有提供iptables规则(的输出sudo iptables -L),但我猜你没有激活 Masquerade 规则,也没有激活 IP 转发如所述

  4. eth1不建议使用 的 IP 地址。以 结尾的任何 IP0通常都是网络本身,并且大多数路由器/防火墙在使用时都会感到困惑。将其更改为192.168.7.1,您基本上就可以了。

  5. broadcast在接口中的值eth1不正确。 正在将包发送到无处。 正确的值(考虑到接口的其他值)是192.168.7.255

  6. DHCP 服务器中的选项非常糟糕。发往路由器的 ARP 包永远无法到达。您应该看到以下情况:

    default-lease-time 600;
    max-lease-time 7200;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.7.255;
    option routers 192.168.7.1; ## This should be the same value of the step 4
    option domain-name-servers 8.8.8.8;
    
    subnet 192.168.7.0 netmask 255.255.255.0 {
        range 192.168.7.10 192.168.7.25;
    }

按照这些操作,你的路由器很可能就会正常工作。

答案2

Braiam 回答了我的问题,但我认为在这里提供一份详尽的演练会很有帮助。如果我犯了任何错误,请更新。

首先确保您有两张以太网卡(NIC),并/etc/network/interfaces按此更新文件(执行不是误以为这是/etc/networks文件)。

iface lo inet loopback                                                                                                                    

auto eth0
   iface eth0 inet static
   address 192.168.1.70
   netmask 255.255.255.0
   broadcast 192.168.1.255
   network 192.168.1.0
   gateway 192.168.1.1
   dns-nameservers 8.8.8.8

auto eth1
   iface eth1 inet static
   address 192.168.7.1
   netmask 255.255.255.0
   broadcast 192.168.7.255
   network 192.168.1.0

要查找您的gatewaybroadcastnetwork请关注这些说明

接下来,进入客户端并编辑/etc/network/interface(再次,不是 /etc/networks) 文件来获取静态 ip,以确保至少 NIC 卡可以正常工作。

iface eth0 inet static
address 192.168.7.75
netmask 255.255.255.0
network 192.168.7.0
broadcast 192.168.7.255
gateway 192.168.7.1

更改值以匹配上述值。如果有效,那就太好了,然后使用说明这里但跟随他们确切地,因为有几个dhcp文件,所以不要将该文件夹/etc/dhcp/etc/dhcp3等等混淆。

相关内容