Linux 网络配置
Linux 网络配置
路由操作
ip route
查看路由表
ip route show
添加一条路由
ip route add [目的网段/掩码] via [网关] dev [网卡] ip route add 192.0.2.0/24 via 10.0.0.1 dev eth0
删除一条路由
ip route del [目标网段/掩码] via [网关] dev [网卡] ip route del 192.0.2.0/24 via 10.0.0.1 dev eth0
查看某个目的的路由信息
ip route get 192.0.2.1
route(deprecated)
ip route
命令是属于 iproute2 套件的一部分,这个套件在现代的 Linux 系统中已经成为了网络配置的标准工具。 相较于旧的route
命令,ip route
提供了更多的功能并且在设计上更加灵活和强大。
route add -net [目的网段] netmask [掩码] gw [网关]
route del -net [目的网段] netmask [掩码] gw [网关]
这样加的路由是临时的, 每次重启都会掉路由, 可以通过在 /root/.bashrc
中写入如下命令
# 如果路由中没有到目的网段 [目的网段] 的路由则添加此条路由
if ! ip route | grep -q [目的网段]; then
route add -net [目的网段] netmask [子网掩码] gw [网关ip]
fi
由于每次打开 bash 都会加载 ~/.bashrc
, 而 VSCode SSH 连远程主机一般第一件事就是新建一个 bash, 所以这样也可以变相解决手动加路由的困扰
不用 bash 的话也可以手动 source ~/.bashrc 来加载路由
-q
参数使得ip route | grep [目的网段]
命令不输出结果, 不使用-d
的话每次新建 bash 都会看到该条命令的输出结果
NetworkManager
NetworkManager 是 RedHat 公司在 2004 年发起的项目, 目标是让 Linux 用户能够更容易地处理现代的网络需求
对于旧有的 ifupdown
和 /etc/network/interfaces
配置而言, NetworkManager 提供了一个用户友好的 GUI, 让用户能够更轻松地管理网络连接和配置
列出所有连接
nmcli connection show
查看特定连接的详细信息
nmcli connection show "连接名称"
修改连接属性
nmcli connection modify "连接名称" 属性 值
启用/禁用连接
nmcli connection up "连接名称" nmcli connection down "连接名称"
删除连接
nmcli connection delete "连接名称"
除了用命令行操作连接配置外, NetworkManager 也可以通过修改文件并重新加载网络配置
NetworkManager 的配置文件通常存储在 /etc/NetworkManager/system-connections
目录下, 每个连接对应一个配置文件
修改完成后保存, 然后重启网络服务使修改生效:
sudo systemctl restart NetworkManager
默认路由
可以在 Advanced Network Configuration
中配置指定网卡的 IPv4 Settings
的 Routes
, 可以配置默认路由
删除默认的网关路由 0.0.0.0/0
则需要编辑 /etc/NetworkManager/system-connections
中对应网卡信息的配置文件
添加
never-default=true
never-default=true
:此配置指示NetworkManager不要将该连接作为默认网关,从而避免创建默认路由0.0.0.0/0
启用与禁用网卡
# 禁用 ensxx(下面两条命令均可)
ip link set ensxx down
ifconfig ensxx down
# 启用 ensxx(下面两条命令均可)
ip link set ensxx up
ifconfig ensxx up
需要注意的是禁用网卡后相应的路由也会掉, 重新启用后需要重配路由
IP 转换
IP 地址分公有地址和私有地址
public address 是由 INIC(internet network information center)负责,这些 ip 地址分配给注册并向 INIC 提出申请的组织机构。通过它访问 internet
private address 是属于非注册地址,专门为组织内部使用;
private ip address 是不可能直接用来跟 WAN 通信的,要么利用帧来通信(FRE 帧中继,HDLC,PPP) ,要么需要路由的 NAT 功能把私有地址转换为一个公有 ip
选择一台电脑(有两个网卡或者用单网卡然后用软件虚拟多一个网卡) 充当网关,一个网卡(eth0)连接外网 ISP,另一网卡(eth1)连接内网(即局域网)。局域网内的 ip 地址都是私用地址,只能在内部使用,在公网上是不可见的,所以局域网电脑要上网必须修改 ip,这就是网关的工作。
工作原理:
内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应。
由于源主机 ip 是私有的,禁止在公网使用,所以必须将数据包的源发送地址修改成公网上的可用 ip,这就是网关收到数据包之后首先要做的工作--ip 转换。
然后网关再把数据包发往目的主机。目的主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,也没必要知道,目的主机处理完请求,把回应信息发还给网关。网关收到后,将目的主机发还的数据包的目的 ip 地址修改为发出请求的内网主机的 ip 地址,并将其发给内网主机。这就是网关的第二个工作--数据包的路由转发。
内网的主机只要查看数据包的目的 ip 与发送请求的源主机 ip 地址相同,就会回应,这就完成了一次请求。
出于安全考虑,Linux 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的 ip 地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。 配置 Linux 系统的 ip 转发功能,首先保证硬件连通,然后打开系统的转发功能
less /proc/sys/net/ipv4/ip_forward
Linux less 命令 | 菜鸟教程 (runoob.com)
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
该文件内容为 0,表示禁止数据包转发,1 表示允许,将其修改为 1。可使用命令
echo "1" > /proc/sys/net/ipv4/ip_forward
修改文件内容,重启网络服务或主机后效果不再。
若要其自动执行,可将命令 echo "1" > /proc/sys/net/ipv4/ip_forward
写入脚本 /etc/rc.d/rc.local
或者 在 /etc/sysconfig/network
脚本中添加 FORWARD_IPV4="YES"
防火墙
iptables
iptables 是 Linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具。iptables 工具运行在用户态,主要是设置各种规则。而 netfilter 则运行在内核态,执行那些设置好的规则。
添加规则
我们可以通过规则来匹配数据包,具体的匹配条件包括 IP、网段、网络接口(interface)和传输协议(tcp、udp 等)。 添加规则的命令格式如下:
iptables [-AI chain] [-io interface] [-p 协议] [-s 来源 IP] [-d 目标 IP] -j [ACCEPT,DROP,REJECT,LOG]
-A
:针对某个规则链添加一条规则,新添加的规则排在现有规则的后面。 -I
:针对某个规则链插入一条规则,可以为新插入的规则指定在链中的序号。如果不指定序号,则新的规则会变成第一条规则。 -i
:指定数据包进入的那个网络接口,比如 eth0、lo 等,需要与 INPUT 链配合使用。 -o
: 指定传出数据包的那个网络接口,需要与 OUTPUT 链配合使用。 -p
: 指定此规则适用于那种网络协议(常用的协议有 tcp、udp、icmp,all 指适用于所有的协议)。 -s
:指定数据包的来源 IP/网段,可以指定单个 IP,如 192.168.1.100,也可以指定一个网段,如 192.168.1.0/24。还可以通过 !表示非的意思,如 ! 192.168.1.0/24 表示除了 192.168.1.0/24 之外的数据包。 -d
:指定数据包的目标 IP/网段,其它与 -s 选项相同。 -j
:指定匹配成功后的行为,主要有 ACCEPT、DROP、REJECT 和 LOG。
代理
# shell 中临时设置(若需要永久设置则写到 ~/.bashrc 中即可)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
# 下掉 proxy:
unset http_proxy
unset https_proxy
安装 proxychains
sudo apt install proxychains
打开上述报错中提到的 Config File, 编辑 [ProxyList]
属性为需要配置的代理
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 7890
然后在需要使用代理的命令前加上 proxychains
即可使用