特定の宛先のみipv4の固定IPアドレス経由で通信する

2024年2月4日

このサイトの管理画面に403エラーで繋がらないようになってしまったので、調べたらipv6IPアドレスが一晩で切り替わっていた。

というのが数日続いたので、別セッションを張ってあるipv4の固定IPアドレス経由で通信するようにした。

  • 宛先(frzl.net)はCloudFlareのDNSProxyの為、IPアドレスが不定期に変わる
  • ipv6ではなくipv4で通信しなければならない

対策として、ipv4のDNSレコードのみ取得し/etc/hostsへ記述し、
都度static route へ記載することで実現できた。

#!/bin/bash

export PATH=$PATH:/sbin

_TGT=frzl.net
_CHECK_IPADDRESS=$(host $_TGT hayes.ns.cloudflare.com | grep "${TGT}\ has\ address" | awk '{print $4}')
#_NEW=$(host $_TGT hayes.ns.cloudflare.com | grep "${TGT}\ has\ address" | awk '{print $4}'|head -n2)
_GW=172.24.44.200
_HOSTS=/etc/hosts

echo $_CHECK_IPADDRESS

for _NEW in $_CHECK_IPADDRESS
do
 grep "$_NEW" $_HOSTS | grep $_TGT
 if [ $? = 0 ];then
  exit 0
 fi
done

ip route del `ip route show table 1` table 1
ip rule del table 1 pref 32765

sed -i -e "/^##\ START\ ${_TGT}\ ##$/,/^##\ END\ ${_TGT}\ ##$/d" $_HOSTS
sed -i -e "s@^##\ CHANGE_UNDER_HERE@##\ CHANGE_UNDER_HERE\n##\ START\ ${_TGT}\ ##\n${_NEW} ${_TGT} www.${_TGT}\n##\ END\ ${_TGT}\ ##\n@" $TARGET $_HOSTS

ip rule add table 1 pref 32765
ip route add $_NEW via $_GW table 1

cron

@reboot /bin/bash /root/bin/staticroute-add-to-frzl.net.sh >/root/bin/staticroute-add-to-frzl.net.sh.log 2>&1
*/30 * * * * /bin/bash /root/bin/staticroute-add-to-frzl.net.sh >/root/bin/staticroute-add-to-frzl.net.sh.log 2>&1

2/4 DNSroundrobinに対応させました。

Posted by ocarina