与此请求类似(我认为),我希望看到绑定到某个端口号的流量通过一个特定接口路由,而特定 IP 的流量通过另一个接口路由。我尝试执行此操作的服务器全新安装了 Ubuntu 14.04.2,因此我拥有大量工具来完成该任务。然而,我对网络没有太多经验,所以我不知道从哪里开始。=)
提前致谢!
编辑:
一些细节,因为它们很重要。
me@server:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 54:9f:35:0a:6a:20 brd ff:ff:ff:ff:ff:ff
inet 10.22.89.50/24 brd 10.22.89.255 scope global em1
valid_lft forever preferred_lft forever
inet6 fe80::569f:35ff:fe0a:6a20/64 scope link
valid_lft forever preferred_lft forever …Run Code Online (Sandbox Code Playgroud) 当您打开 wifi 功能时,GoPro 摄像机会创建一个 wifi 热点。无法让它们使用不同的 IP 范围,我需要同时连接到多个 GoPro(使用多个无线接口)。
GoPro 将在两个网络上的 IP 10.5.5.9 上可用。
如何将 IP 地址从 wlan1 转换为不同的范围?例如,wlan1 上的化妆地址 10.5.5.* 可用作 10.1.1.*?
这将允许我在 10.1.1.9 上访问一个 GoPro,在 10.5.5.9 上访问另一个 GoPro。
当我运行时sudo mtr 4.2.2.1,它在终端中循环运行。
我想保持与以下相同的格式:
Host
1. 192.168.15.1
2. ???
3. 10.254.254.x
4. 10.254.254.x
5. core1.lon2.he.net
6. 10gigabitethernet2-1.core1.lon2.he.net
7. a.resolvers.level3.net
Run Code Online (Sandbox Code Playgroud)
但打印一次到标准输出。
在手册中,我只能看到以 XML、JSON、CSV 或 RAW 格式打印它的选项,但不能像上面那样以人类可读的格式打印一次。基本上我在使用traceroute命令时对类似的格式感兴趣,但对于mtr. 是否可以?
我试图以 as 运行sudo mtr -c1 4.2.2.1 | head -n20,但它破坏了终端,所以reset每次使用后我都必须使用它。有什么解决方法吗?
我有2台机器
A 192.168.0.40 (CentOS)
B 192.168.0.41 (Debian)
Gateway 192.168.0.2
Run Code Online (Sandbox Code Playgroud)
现在我确实使用firewallD设置了端口转发,从
A port 2245
to
B port 22
Run Code Online (Sandbox Code Playgroud)
从客户端 192.168.0.1 到机器 B 通过机器 A 建立的连接
在机器 A 上运行 netstat
# netstat -tulpane
Run Code Online (Sandbox Code Playgroud)
输出:
# netstat -tulpane
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 0 16330 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 20510 1273/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 …Run Code Online (Sandbox Code Playgroud) 我的 ISP 授予我一个IPv4 地址和一个 IPv6 前缀,该前缀已细分为几个网络。
+--------------+
| | eth1
| |---------- <IPv6 network>
| |
eth0 | Linux Router | eth2
ISP ----------| |---------- <IPv6 network>
| |
| | eth3
| |---------- <IPv6 network>
+--------------+
Run Code Online (Sandbox Code Playgroud)
碰巧的是,所连接的 IPv6 网络中的一个节点eth1将受益于拥有 IPv4 地址。
看来我希望路由器桥接IPv4 流量并路由IPv6 流量。不?
我听说过代理 ARP,但据我所知,我需要为路由器提供另一个 IPv4 地址,否则它不会尝试与 ISP 的 v4 流量进行交互,对吧?再说一遍,我只有一个 v4 地址。
我认为,普通桥接也不是一种选择,因为那是第 2 层,它无法区分 IPv4 流量和 IPv6 流量之间的区别。如果桥接 IPv4,也会桥接 IPv6,这会破坏当前的 IPv6 设置。
我是否被迫将流量 NAT 到专用网络,并从该网络为节点分配另一个地址?有更直接的选择吗?
我注意到这两种命令格式给出了不同的结果:
$ sudo route -v add -net <IP> netmask 255.255.255.255 gw <gateway>
# succeeds without outputting text
$ sudo route -v add -net <IP>/32 gw <gateway>
SIOCADDRT: Invalid argument
Run Code Online (Sandbox Code Playgroud)
man 文件route清楚地说明 CIDR 格式应该可以工作:
路由 [-v] [-A family] 添加 [-net|-host] 目标 [网络掩码 Nm] [gw Gw]...
[...]
目标:目标网络或主机。您可以提供点分十进制或主机/网络名称中的 IP 地址。
那么我错过了什么?
注意:此外,verbose 选项在此命令上似乎无用。
我可以做这个:
/sbin/ip addr add 172.17.0.12 dev eth0
Run Code Online (Sandbox Code Playgroud)
这种可能性与我的(显然过于简单和不真实的)分配 IP 地址如何工作的心理模型相冲突。
根据这个心智模型:
对我来说,给自己分配 IP 地址的想法似乎……毫无意义?那么如果计算机声明“这是我的 IP 地址”怎么办?IP 地址的目的是让路由器知道数据包应该转发到哪里。
在上面的例子中,当一台计算机为172.17.0.12自己分配一个私有网络地址时,只有当该私有网络的路由器知道并同意这台计算机拥有这个地址时,这才有意义。但在这种情况下,这不会是真的!那么任何数据包都可以eth0到达这台计算机吗?
我有一台服务器,有 2 个接口连接到dhcp两个不同的子网。这 2 个不同的子网通过 2 个不同的接口连接到同一交换机。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
23: enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c4:00:ad:a4:e3:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.201.232/24 brd 192.168.201.255 scope global enp10s0
valid_lft forever preferred_lft forever
25: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc …Run Code Online (Sandbox Code Playgroud) 我知道星号意味着路由器没有发回 ICMP 消息,说 TTL 为 0,我必须转储请求。
但有时在某些情况下,当我想检查我的数据包到服务器的路径时,在某些时候它会不断打印 * * * 并且永不结束。即使我将 -h 标志(或 -m 标志取决于您的操作系统)设置为 255,这是 TTL 的最大数量,它也会一直打印星号到最后,我的意思是我的数据包显然不需要 255 跳才能到达目的地。
这是 microsoft.com 的示例
tracert -h 255 microsoft.com
Tracing route to microsoft.com [40.76.4.15]
over a maximum of 255 hops:
1 125 ms 127 ms 144 ms 10.10.10.232
2 148 ms 151 ms 125 ms 149.202.66.253
3 122 ms 129 ms 123 ms 10.50.60.61
4 139 ms 128 ms 127 ms 10.17.130.102
5 123 ms 125 ms 125 ms 10.73.0.6
6 150 …Run Code Online (Sandbox Code Playgroud) 在我的机器上,我有两个接口:(wlan0默认路由)和tun0. 该tun0接口只是一个本地网络,它的 IP 范围是172.16.150.0/24,我的机器(机器 A)的 IP 地址是172.16.150.1,另一台机器(机器 B)的 IP 地址是172.16.150.128。我设置了一个 wifi 热点,它为我创建了另一个界面ap0。我想ap0通过机器B路由来自接口的所有流量(因此网关应该是172.16.150.128)。
$ ip route
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.179 metric 1024
172.16.150.0/24 dev tun0 proto kernel scope link src 172.16.150.1 metric 1024
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.179 metric 1024
192.168.0.1 dev wlan0 proto dhcp scope link src 192.168.0.179 metric 1024
192.168.12.0/24 dev ap0 …Run Code Online (Sandbox Code Playgroud) routing ×10
networking ×5
linux ×3
traceroute ×2
bridge ×1
firewalld ×1
icmp ×1
ip ×1
ip-address ×1
iproute ×1
iptables ×1
nat ×1
netstat ×1
osx ×1
ping ×1