我想知道是否有可能告诉 Linux 内核通过 interface/ip Y 路由所有目的地为 X 的数据包,但前提是源 IP 地址是特定的。
知道这是否可能吗?
感谢致敬,
我在网络世界中相对新手,虽然我做了编码并且知道一些系统管理员背景很长一段时间。在这里,我离目的地只有一步之遥。
整体情况是:在家里我使用一台LinkSys E3000作为网关(不知道这是不是它的名字),无线AP,没有其他路由/交换设备。它为 1 台 PC 和 1 台带 LAN 的 Mac、1 台 Mac Mini + 1 台 iPad + 2 台带 WIFI 的智能手机提供服务。
我的目标是在 E3000 上使用 openvpn 客户端(带有番茄固件)并使我的 iPad 和智能手机的所有 WiFi 流量都通过它,而其他设备的路由保持相同的非 openvpn 路由。
到目前为止,我能够将 E3000 上的 openvpn 客户端连接到 openvpn 服务器,通过该 openvpn 连接隧道传输我所有设备的所有流量。剩下的是如何通过源 IP(至少在我的猜测中)有选择地路由到隧道,同时不打扰其他人。
在过去的几天里,我学习了一些“iptables”和“route”,但运气不佳,所以我的问题来了。这里有一些信息可以帮助您获得结构。
ifconfig -a 输出,把一些无用的线划掉,在web界面中C0:C1:C0:1A:E0:28是WAN,C0:C1:C0:1A:E0:27是LAN,C0:C1:C0:1A :E0:29 是 2.4G wifi AP,C0:C1:C0:1A:E0:2A 是 5G wifi AP。
root@router:/tmp/home/root# ifconfig -a
br0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST0 Metric:15eth0 Link encap:Ethernet HWaddr C0:C1:C0:1A:E0:27 …
当我使用 打印在我的计算机上定义的路线时route,大约需要 5 到 20 秒才能完成。为什么要花这么多时间?
启用 VPN:
$ time sudo route
Kernel IP routing table
(...)
real 0m21.423s
user 0m0.000s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)
在没有 VPN 的情况下,这大约是 5 秒 - 尽管如此,计算机在这段时间内可以做很多事情。我重复了几次测量,每次尝试都得到非常相似的结果。
我的机器是带有 3.0.0 内核的 Ubuntu,但据我所知,其他计算机上的路由以相同的方式工作。
在 DDOS 攻击期间,如果我们发现要阻止的 IP,使用空路由是否会比使用 iptables 获得更好的性能?
空路由我们会做这样的事情:
ip route add blackhole <ip or range>
Run Code Online (Sandbox Code Playgroud)
在 iptables 中:
/sbin/iptables -A INPUT -s <ip or range> -j DR
Run Code Online (Sandbox Code Playgroud)
没有区别吗?我怀疑route会工作得更好,但不确定。
我有一堆带有多个(3)网卡和相关网络接口的 Linux 服务器。我被一个奇怪的路由问题绊倒了,应该使用默认路由的流量不是,结果路由失败。这是我的路由表的样子:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.31.96.1 0.0.0.0 UG 0 0 0 em3
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 em1
10.31.96.0 0.0.0.0 255.255.252.0 U 0 0 0 em3
10.31.96.0 0.0.0.0 255.255.252.0 U 0 0 0 em4
# ip route list
default via 10.31.96.1 dev em3 proto static
10.0.0.0/8 dev em1 proto kernel scope link src 10.0.0.100
10.31.96.0/22 dev em3 proto kernel scope link src 10.31.97.100
10.31.96.0/22 …Run Code Online (Sandbox Code Playgroud) 我在同时使用 IPv4 和 IPv6 的专用服务器上使用 Debian Wheezy。
如果配置 eth0
eth0 Link encap:Ethernet HWaddr 11:11:11:11:11:11
inet adr:90.0.0.1 Bcast:90.0.0.255 Masque:255.255.255.0
adr inet6: fe80::21c:c0ff:feb9:829c/64 Scope:Lien
adr inet6: 2001:a100:1:bbbb::1/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1544 errors:0 dropped:0 overruns:0 frame:0
TX packets:2199 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:304146 (297.0 KiB) TX bytes:1376282 (1.3 MiB)
Run Code Online (Sandbox Code Playgroud)
(几分钟后,RX 下降计数器增加。)
cat /etc/network/interfaces
我首先使用了“网关”关键字,但它不起作用,所以我尝试在文件中添加路由,但它也不起作用。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 90.0.0.1
netmask 255.255.255.0
network 90.0.0.0
broadcast …Run Code Online (Sandbox Code Playgroud) 我在 curlmyip.com 上运行 curl,我得到了错误的输出 IP 地址。我的 systemd 服务文件是:
[Unit]
Description=Wired Networking
Wants=network.target dibbler-client.service
Before=network.target dibbler-client.service
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network
ExecStart=/sbin/ip link set dev ${interface} up
ExecStart=/sbin/ip addr add ${address}/24 dev ${interface}
ExecStart=/sbin/ip addr add ${failover}/32 dev ${interface}
ExecStart=/sbin/ip route add default via ${gateway} src ${failover}
ExecStart=/sbin/ip -6 addr add ${addressv6}/64 dev ${interface}
ExecStop=/sbin/ip addr flush dev ${interface}
ExecStop=/sbin/ip -6 addr flush dev ${interface}
ExecStop=/sbin/ip link set dev ${interface} down
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
变量是:
interface=eno1
address=88.190.15.135
address6=2001:bc8:300a:dead::b12d
failover=212.83.129.104
broadcast=88.190.15.255
gateway=88.190.15.1
Run Code Online (Sandbox Code Playgroud)
现在,ip 地址给我: …
出于某种原因,我的 Centos 5.9 Linux 2.6.18 x86_64 希望我有两个默认路由。
每当我重新启动服务器时,我的路由表如下所示:
[root@server1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
255.255.255.255 0.0.0.0 255.255.255.255 UH 0 0 0 bond0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 bond1
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 bond0
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 bond1
Run Code Online (Sandbox Code Playgroud)
bond1 是一个本地网络,因此最后一条默认路由指向该网络会使所有 Internet 请求失败。
通过执行很容易修复它route del default …
root@new [~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
178.18.23.200 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
178.18.23.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
176.0.0.0 0.0.0.0 248.0.0.0 U 0 0 0 eth0
0.0.0.0 178.18.23.253 0.0.0.0 UG 0 0 0 eth0
Run Code Online (Sandbox Code Playgroud)
我可以删除 176.0.0.0 条目
route delete -net 176.0.0.0/5
Run Code Online (Sandbox Code Playgroud)
这有效,但重启后这条线又回来了。知道如何永久删除它吗?
我在为我的网络接口设置永久路由时遇到问题,
在我的配置下面:
ETH0 : 172.23.137.27 网络掩码 /25 - 255.255.255.128 网关 – 192.168.126.126
ETH1:中继 VLAN - VLAN ID:305 172.21.107.123 网络掩码 /28 - 255.255.255.240 网关 - 172.21.107.113
接口配置如下:
猫 ifcfg-eth0 设备=eth0 HWADDR=2C:59:E5:42:CB:EC 类型=以太网 #UUID=eefb4ac8-42ba-4fc3-9918-08aae7edef3b 开机=是 #NM_CONTROLLED=否 BOOTPROTO=静态 IPADDR=192.168.126.27 网罩=255.255.255.128 网关=192.168.126.126 #USERCTL=否 猫 ifcfg-eth1 设备=eth1 HWADDR=2C:59:E5:42:CB:ED UUID=68f6c45e-48ba-4b33-8da7-d4d7979eb72d 开机=是 BOOTPROTO=无 NM_CONTROLED=否 猫 ifcfg-eth1.305 设备=eth1.305 VLAN=是 开机=是 BOOTPROTO=静态 类型=以太网 IPADDR=172.21.107.123 网罩=255.255.255.240 网关=172.21.107.113 #NM_CONTROLLED=否 路由 -n 内核IP路由表 目标网关 Genmask Flags Metric Ref Use Iface 172.21.107.112 0.0.0.0 255.255.255.240 U 0 0 0 eth1.305 192.168.126.0 0.0.0.0 255.255.255.128 U …