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


34

动机:

由于某些原因,我想使用我的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告诉我两个NIC都工作正常:

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         

题:

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


您正在使用什么dhcpd?
TML

@TML据我了解dhcp(因此dhcpd不是强制性的),仅用于在服务器上集中所有静态ip(而不是/etc/network/interfaces每个主机中更改文件)。因此,我决定在此方法生效之前不要尝试该方法。但是dhcp3-server,我确实已经安装,以及isc-dhcp-server
puk

如果希望客户端从dhcp获取IP地址,则需要运行dhcpd。您应该为当前所有dhcpd的配置中的任何一个发布配置,因为这是问题的根源所在:客户端未获得IP。就个人而言,我会推荐dnsmasq,因为它还带有一些用于进行内部DNS解析的有用功能。
TML

@TML我添加了dhcpd.conf文件并指示我正在使用isc-dhcp-server
puk 2013年

1
您应该再注意两点:5.我厌倦了仅部分控制设备。6.我对拥有可能带有后门的路由器感到厌倦。第6点是真实的东西,现在可以在任何路由器中使用。一些路由器确实具有额外的功能,例如硬编码的密码或秘密侦听某些端口。
Ignas2526 2015年

Answers:


16

由于您缺少一些东西,我必须像开膛手杰克一样去:

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

    iface eth0 inet dhcp

    在客户端中,这表明它们将从DHCP服务器获取IP,如果您未设置DHCP服务器,则应使用固定IP或安装DHCP服务器。

  2. 您缺少在客户端中配置的DNS服务器。由于缺少DHCP服务器,或者您可能想对所有网络使用本地DNS服务器。

  3. 你没有提供的iptables规则(输出sudo iptables -L),但我能猜到你没有激活避世的规则,也没有IP转发描述

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

  5. broadcasteth1界面中输入的值不正确。正在将包裹发送到任何地方。正确的值(考虑到接口的其他值)为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;
    }

请遵循以下步骤,很可能您的路由器将工作。


sudo iptables -L问题的输出增加了
puk

不要挑剔,但是为了阅读此答案的其他人的利益,您能解释一下这些dhcpd.conf值是什么吗:第4 192.168.7.255行和第8行subnet 192.168.7.0
puk

@puk太复杂了,无法在注释中进行解释,但可以说,这.255是通常使用的广播地址,发送到该方向的任何程序包都将被发送到同一子网中的所有系统。这意味着发送到1.2.3.255的任何程序包都将被IP以1.2.3开头的任何系统接收,因为它们都在同一个子网中en.wikipedia.org/wiki/Subnetwork#IPv4_subnetting
Braiam 2013年

不工作 我想看看问题是否出dhcp在网络上。将做一个静态IP地址进行测试。对于客户端上的静态IP,我是否将eth1的IP地址用作网关?
2013年

1
可能是因为路由器eth1上的广播和网络都指向192.168.1.x而不是192.168.7.x。如果您无法从路由器上的eth1与客户端上的eth0进行通信,则DHCPACK将永远不会到达客户端(因此它将永远无法获得IP)。
TML

9

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

要找到您gatewaybroadcast并且network,遵循这些说明

接下来,进入客户端并首先编辑静态IP 的/etc/network/interface(同样,不是 /etc/networks)文件,以确保至少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等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.