无法在Ubuntu 16.04上正确配置网关
我正在尝试使用Ubuntu 16.04建立网关,我的服务器有以下网络:
enp4s0 Link encap:Ethernet HWaddr 00:15:c5:f6:c0:36 inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::215:c5ff:fef6:c036/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5118 errors:0 dropped:0 overruns:0 frame:0 TX packets:3065 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7474529 (7.4 MB) TX bytes:254689 (254.6 KB) Interrupt:16 enp6s0 Link encap:Ethernet HWaddr 00:08:54:31:8f:79 inet addr:172.24.3.19 Bcast:172.24.3.255 Mask:255.255.252.0 inet6 addr: fe80::208:54ff:fe31:8f79/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7573 errors:0 dropped:334 overruns:0 frame:0 TX packets:2756 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:756664 (756.6 KB) TX bytes:881724 (881.7 KB)
enp4s0是WAN nic,连接到Internet。 enp6s0是LAN nic。
我在/etc/network/interfaces
上配置它们:
allow-hotplug enp4s0 iface enp4s0 inet dhcp allow-hotplug enp6s0 iface enp6s0 inet static address 172.24.3.19 netmask 255.255.252.0 gateway 172.24.0.1 dns-nameservers 172.24.3.1
enp4s0接收ip如下,从/var/lib/dhcp/dhclient.enp4s0.leases
提取:
lease { interface "enp4s0"; fixed-address 192.168.0.101; option subnet-mask 255.255.255.0; option routers 192.168.0.1; option dhcp-lease-time 7200; option dhcp-message-type 5; option domain-name-servers 192.168.0.1,8.8.8.8; option dhcp-server-identifier 192.168.0.1; renew 5 2018/06/08 16:03:17; rebind 5 2018/06/08 16:59:19; expire 5 2018/06/08 17:14:19; }
在Nairabytes.net之后,我应用了一些iptables规则如下:
iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE iptables -A FORWARD -i enp4s0 -o enp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i enp6s0 -o enp4s0 -j ACCEPT
所以iptables规则如下:
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination
但我无法理解的是为什么只有两个nics中的一个正常工作。 虽然此服务器可以通过enp6s0与LAN通信,但它无法连接到Internet。
所以我将这条路线应用于它:
sudo /sbin/route add -net 0.0.0.0 gw 192.168.0.1 enp4s0
事情还原了! 现在服务器可以连接到互联网,但无法访问局域网。
我究竟做错了什么?
sudo /sbin/route add -net 0.0.0.0 gw 192.168.0.1 enp4s0
这将一切的路由设置为192.168.0.1。
您可能想要添加默认网关,这意味着任何不匹配任何更具体的路由都在这里。 这可以使用以下命令完成:
sudo ip route add default via 192.168.0.1 dev enp4s0
此外,您需要在另一个NIC上使用172.24.0.0/16的路由:
sudo ip route add -net 172.24.0.0/16 via 172.24.3.1 dev enp6s0
这将为您的本地172.240.0 / 16网络添加路由,使您可以访问此网络。 由于这是一个更具体的路由,因此对于转发到172.24.0.0的数据包,它会被默认选中。