IP地址重定向(使用iptables/pfctl)

问题场景

Docker启动MySQL后,用127.0.0.1无法连接到容器,只能使用本机器的IP进行访问。配置文件是项目开发公用的,所以修改配置文件不是一个好的解决方法。故使用IPtable将127.0.0.1的特定端口(如3306)重定向到本机器IP,这样使用127.0.0.1其实是连接到本机由DHCP分配的IPv4地址。

mac使用pfctl

echo "rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 3306 -> 10.215.103.225 port 3306" | sudo pfctl -ef -

其中 lo0 通过 ifconfig -a 查看到的网络名称。10.215.103.225 是lo0的本机ipv4地址。

linux的等同iptables命令

iptables -t nat -I PREROUTING -d 127.0.0.1 -p tcp --destination-port 3306 -j DNAT --to-destination 10.215.103.225:3306

后续

当我再次尝试使用jdbc连接本地数据库时,失败,但是使用socket连接是正常的,奈何jdbc只能使用tcp连接。编辑my.cnf配置Mysql强制使用tcp连接,natstat查看端口监听情况。

netstat -lna | grep mysql

显示tcp监听正常。jdbc依然无法连接。

这才回想起来我做了端口映射,将到达tcp端口3306的包转发到另一ip地址上了。折腾了2个小时,唉。

屏幕快照 2018-04-03 下午6.01.01.png

意外收获

macos下类似iptables的强大工具pfctl

意外发现的 pfctl命令集合

你可能感兴趣的:(IP地址重定向(使用iptables/pfctl))