我试图了解 Linux 上的网络工具。我现在对应该使用什么来操作静态路由感到困惑:route或ip route?:
route - 显示/操作 IP 路由表
ip - 显示/操作路由、设备、策略路由和隧道
这两个工具有什么区别?
背景资料
我有一个带有两个运行 Docker 的网络接口的服务器。Docker 和一些虚拟化工具一样,创建了一个名为docker0. 默认情况下,此接口配置了一个 IP,172.17.42.1所有 Docker 容器都使用此接口作为网关进行通信,并分配了相同/16范围内的IP 地址。据我了解,所有进出容器的网络流量都经过 NAT,因此出站流量似乎来自172.17.42.1,入站流量则发送到172.17.42.1.
我的设置看起来像这样:
+------------+ /
| | |
+-------------+ Gateway 1 +-------
| | 10.1.1.1 | /
+------+-------+ +------------+ |
| eth0 | /
| 10.1.1.2 | |
| | |
| DOCKER HOST | |
| | | Internet
| docker0 | |
| (bridge) | |
| 172.17.42.1 | |
| | |
| eth1 | |
| 192.168.1.2 …Run Code Online (Sandbox Code Playgroud) 我需要配置我的 openvpn 服务器以提供一些 LAN 资源,但我不想为我的客户端路由所有流量。
这是我的示例网络描述:我的 LAN 是 192.168.1.0/24。Openvpn 网络是 192.168.100.0/24。我添加push route 192.168.1.0 255.255.255.0了我的服务器端配置。我想让我的客户可以访问 192.168.1.0/24,但不能访问其他流量。
如何从服务器端配置执行此操作?客户端配置是唯一的方法吗?
我有一个有 2 个接口的服务器。eth0 比 eth1 快 100 倍。尽管出于某种原因,每次重新启动时,都会随机选择默认界面。更烦人的是,它们都使用相同的网关,因此选择默认网关不起作用。linux如何选择默认界面,如何选择默认界面?
这是我route -n的帮助解释一下情况。
Destination Gateway Genmask Flags Metric Ref Use Iface
173.246.100.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1
173.246.100.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
0.0.0.0 173.246.103.254 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 173.246.103.254 0.0.0.0 UG 100 0 0 eth0
Run Code Online (Sandbox Code Playgroud)
附注。这是一个 VPS,所以我的提供商也可能在某处有问题。第二个接口的原因是为了dns有另一个IP,因为它只做DNS,速度很慢。
编辑:这是一个 Ubuntu 10.04 服务器
我一直在 Linux 上使用自定义路由表,我对“ip route”命令的一些文档和行为感到有些困惑。似乎唯一有效的值应该是 0-255 加上 /etc/iproute2/rt_tables 中定义的名称:
255 local
254 main
253 default
0 unspec
Run Code Online (Sandbox Code Playgroud)
这将为自定义表留下 1-252。尝试使用未定义的表名会出现错误:
$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid
Run Code Online (Sandbox Code Playgroud)
但是,似乎我可以使用远高于 255 的数字而不会出错:
$ ip route show table 1000
[no output]
$ ip route add 10.10.10.0/24 dev eth0 table 1000
[no output]
$ ip route show table 1000
10.10.10.0/24 dev eth0 scope link
Run Code Online (Sandbox Code Playgroud)
在某些时候,事情变得更加奇怪。在 maxint (2^31) 处,它“溢出”到本地表 (255):
$ ip route show table 2147483647
[no output] …Run Code Online (Sandbox Code Playgroud) 如何更改默认路由以使用 eth1 (DHCP) 而不是 eth0(静态)?我希望这是通过重新启动而持久的永久解决方案。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default RT-C0C1C0CF879F 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
1.1.1.0 * 255.255.240.0 U 0 0 0 eth1
Run Code Online (Sandbox Code Playgroud)
我希望直接路由 (eth1) 为默认路由,而不是通过 NAT。
使用 Ubuntu 12.04
我在 freebsd 上有两个 Internet 频道和网关。当我使用命令切换频道时route change default chan2,该命令netstat -nr显示更改的默认路由。但traceroute显示数据包通过旧路由chan1。
例子:
$netstat -nr
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire
default xxx.xxx.183.54 US 0 8432 em3
$sudo route change default xxx.xxx.144.125
change net default: gateway> xxx.xxx.144.125
$netstat -nr
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire
default xxx.xxx.144.125 US 2 16450 em3
Run Code Online (Sandbox Code Playgroud)
但
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
1 xxx.xxx.183.53 (xxx.xxx.183.53) 0.527 …Run Code Online (Sandbox Code Playgroud) 我有一台 DHCP 服务器(Linux、IPCop、dnsmasq)在我的默认网关服务器 192.168.0.1 上运行。我在网络中的另一台服务器上有一个 VPN 端点 (192.168.0.4)。是否可以配置 DHCP 服务器,使其在请求 IP 地址时不仅向 DHCP 客户端发送默认网关,还向其发送 VPN (192.168.1.*) 的路由信息?DHCP 客户端运行 Windows 和 Linux。
我试图在官方文档(http://www.ipcop.org/2.0.0/en/admin/html/custom-dnsmasq-local.html)中找到一些东西但失败了。RFC3442的存在表明它可能以某种方式成为可能。
假设我有一台机器在不同的子网上有两个网络适配器,eth0(10.0.100.5) 和eth1(10.0.200.5)。假设两个子网都有到 Internet(通过它们自己的 NAT)和到本地网络的其余部分(通过它们自己的交换机)的路由:
AWS VPC 环境,其他运行 Ubuntu 12.04 的机器,不知道我试图影响的机器正在运行(因为我无法登录)。
说明:
/24s我想了解什么是本地路由表。
如果我使用以下命令在其中添加一个随机地址:
sudo ip route add to local <any-ip-address> dev <network interface>
Run Code Online (Sandbox Code Playgroud)
现在我可以 ping 这个地址,但是 ifconfig 列出的接口没有使用这个地址。
例子:
$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.
--- 192.168.22.22 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
$ sudo ip route add to local 192.168.22.22 dev wlp2s0
$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.
64 bytes from 192.168.22.22: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 192.168.22.22: icmp_seq=2 …Run Code Online (Sandbox Code Playgroud)