Debian 将网络接口配置为网桥/网络交换机
2024年3月29日我有在 FreeBSD/Linux 服务器上运行的 MySQL/MariaDB 数据库系统。服务器有多个IP地址。许多网站使用的 mysqld 托管在另外两台基于 CentOS Linux 的服务器上。我想将在Linux或类Unix服务器上运行的MySQL服务器绑定到多个IP地址,例如202.54.1.2、202.54.1.10和202.54.1.15。如何将 mysqld 绑定到多个 ip?
[请勿打印]
教程详情 | |
---|---|
难度级别 | 先进的 |
根权限 | 是的 |
要求 | MySQLD pf 或 iptables |
美东时间。阅读时间 | 4分钟 |
[/donotprint]
简短回答 – 不可以。无论是在 FreeBSD 或类 Linux/Unix 操作系统上运行,您都无法在 MySQL 数据库服务器下绑定多个 IP 地址。
长答案
来自mysql 文档:
MySQL 服务器在单个网络套接字上侦听 TCP/IP 连接。该套接字绑定到单个地址,但一个地址可以映射到多个网络接口。默认地址是 0.0.0.0。要显式指定地址,请在服务器启动时使用 –bind-address=addr 选项,其中 addr 是 IPv4 地址或主机名。如果 addr 是主机名,服务器会将该名称解析为 IPv4 地址并绑定到该地址。服务器对不同类型的地址进行如下处理:
- 如果地址为 0.0.0.0,则服务器接受所有服务器主机 IPv4 接口上的 TCP/IP 连接。
- 如果该地址是“常规”IPv4 地址(例如 127.0.0.1),则服务器仅接受该特定 IPv4 地址的 TCP/IP 连接。
使用防火墙
考虑以下设置:
+------------------------------------------------ ---------+ | +==========服务器_IP1 202.54.1.2 | | +--------+ | | | | mysqld +--------+==========Server_IP2 202.54.1.10 +--------> 局域网/广域网 ----> | +--------+ | | | Server_IP0 +==========Server_IP3 与 202.54.1.15 | | 202.54.1.1 | +------------------------------------------------ ---------+ 名为 db1.example.com 的 UNIX/Linux 盒子
在哪里,
- Mysqld 服务器将绑定到所有接口上的所有 IP。
- 使用防火墙来控制对此服务器上运行的 mysqld 的访问。确保仅允许连接到 202.54.1.{2,10,15} tcp 端口 # 3306
配置
您可以在 my.cnf 中设置bind-address指令。编辑/etc/my.cnf或/usr/local/etc/my.cnf,运行:
# vi /usr/local/etc/my.cnf
或
# vi /etc/my.cnf
将地址设置为 0.0.0.0:
绑定地址 = 0.0.0.0
确保删除以下行或注释掉以下行:
#跳过网络
保存并关闭文件。接下来设置防火墙并仅允许来自或选择的 IP 的连接。
Linux iptables 规则
阻止所有到 mysqld TCP 端口#3306 的传入连接(202.54.1.2、202.54.1.10 和 202.54.1.15 除外):
### 现在,允许 202.54.1.2、202.54.1.10 和 202.54.1.15 ### / sbin / iptables -A INPUT -p tcp -s 202.54.1.2 --dport 3306 -j ACCEPT / sbin / iptables -A INPUT -p tcp -s 202.54.1.10 --dport 3306 -j ACCEPT / sbin / iptables -A INPUT -p tcp -s 202.54.1.15 --dport 3306 -j ACCEPT ##阻止所有到3306的连接## / sbin / iptables -A输入-p tcp --dport 3306 -j删除
或者
## 阻止除三个 ip 之外的所有到 3306 的连接## / sbin / iptables -A INPUT -p tcp --dport 3306 ! -s 202.54.1.2 -j删除 / sbin / iptables -A INPUT -p tcp --dport 3306 ! -s 202.54.1.10 -j删除 / sbin / iptables -A INPUT -p tcp --dport 3306 ! -s 202.54.1.15 -j删除
保存设置:
# service iptables save
键入以下命令以验证新设置:
echo -e "目标 prot opt 源目的地n $(iptables -L INPUT -n | grep 3306) "
输出示例:
pf防火墙规则
在 /etc/pf.conf 中使用以下语法:
## 我们的接口 ## ext_if = "vr0" ## 不要阻止 mysqld ## mysqld_ip = "{ !202.54.1.2, !202.54.1.10, !202.54.1.15 }" ## 阻止 TCP 端口号3306之外的所有内容$mysqld_ip ### 阻止从任意端口到 $mysqld_ip 端口3306的 $ext_if proto tcp
使用 pf.conf 文件加载更新的防火墙规则:
# pfctl -f /etc/pf.conf
显示当前规则集,输入:
示例输出:
# pfctl -sr
# pfctl -sr | grep 3306
添加/更新 mysql 服务器用户和权限设置
假设您始终从名为 202.54.1.10 的远程 IP 为用户 bar 的名为 foo 的现有 mysqld 数据库建立连接,要授予对此 IP 地址的访问权限,请在 mysql 服务器 202.54.1.1 上键入以下命令:
mysql> update db set Host='202.54.1.10' where Db='foo';
mysql> update user set Host='202.54.1.10' where user='bar';
重新启动/重新加载 mysql 服务器
键入以下命令重新启动 mysqld。如果您使用的是 Red Hat Enterprise Linux 和朋友:
# service mysqld restart
Debian Linux 和朋友使用以下命令:
# service mysql restart
FreeBSD unix 用户键入以下命令来重新启动 mysql服务器:
# /usr/local/etc/rc.d/mysql-server stop && /usr/local/etc/rc.d/mysql-server start
如何测试我的设置?
从客户端 (202.54.1.10) 输入以下命令连接到 202.54.1.1:3306,输入:
其中,
[[email protected] ]$ mysql -u foo -h 202.54.1.1 -P 3306 -p bar
- -u foo:连接到服务器时使用的 MySQL 用户名。
- -h 202.54.1.1:连接到给定主机/IP 地址上的 MySQL 服务器。
- -P 3306:用于连接的 TCP/IP 端口号。
- bar: 数据库名称。