Ubuntu 14.04 作为网关/路由器和防火墙

San*_*ese 16 router gateway 14.04

我当前的系统设置是 Ubuntu 14.04 桌面 64 位,我使用公共 IP 从路由器使用 Internet

eth0 - WAN Public IP 182.x.x.x  
eth1 - LAN private IP 192.168.0.1
Run Code Online (Sandbox Code Playgroud)

现在我想将此连接分发到使用我的系统作为Gateway,我的系统 IP 是192.168.0.1和网络上的其他计算机使用静态 IP192.168.0.2192.168.0.255 作为static和/或DHCP

另外我想在我的系统上设置防火墙,以便我可以监视和控制网络上其他系统的流量。

Anb*_*nbu 16

  1. 打开一个终端Ctrl+ Alt+T

  2. 输入以下命令编辑interfaces文件:

    sudo vim /etc/network/interfaces
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用以下几行编辑文件:(添加您的netmaskgateway

    auto lo 
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
    address 182.x.x.x 
    netmask  x.x.x.x 
    gateway x.x.x.x
    
    auto eth1
    iface eth1 inet static 
    address 192.168.0.1
    netmask x.x.x.x
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在编辑/etc/sysctl.conf并取消注释:

    # net.ipv4.ip_forward=1
    
    Run Code Online (Sandbox Code Playgroud)

    所以它写着:

    net.ipv4.ip_forward=1
    
    Run Code Online (Sandbox Code Playgroud)

    并通过输入保存它

    sudo sysctl -p /etc/sysctl.conf

  5. 要启用 IP 伪装,请在终端中输入以下命令集:

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
    sudo iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    
    sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    
    Run Code Online (Sandbox Code Playgroud)

更新:修复奇怪的“--state”导致命令失败并将 nat MASQUERADE 修复为 eth0(wan 接口)

  • 我想补充一点,在更改“net.ipv4.ip forward=1”这一行后,您需要运行“sudo sysctl -p /etc/sysctl.conf”以使新值生效。 (3认同)
  • 您仍然在步骤 5 的最后两行中交换了设备,并且您没有提及默认安全性(即,转发应该有一个 DROP 策略)。 (2认同)