⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipsrcaddr.in

📁 linux集群服务器软件代码包
💻 IN
字号:
#!/bin/sh##	Description:	IPsrcaddr - Preferred source address modification##	Author:			John Sutton <john@scl.co.uk>#	Support:		linux-ha@muc.de#	License:		GNU General Public License (GPL)#	Copyright:		SCL Internet##	Based on the IPaddr script.##	This script manages the preferred source address associated with#	packets which originate on the localhost and are routed through the#	default route.  By default, i.e. without the use of this script or#	similar, these packets will carry the IP of the primary i.e. the#	non-aliased interface.  This can be a nuisance if you need to ensure#	that such packets carry the same IP irrespective of which host in#	a redundant cluster they actually originate from.##	It can add a preferred source address, or remove one.##	usage: IPsrcaddr ip-address {start|stop|status|monitor}##	The "start" arg adds a preferred source address.##	Surprisingly, the "stop" arg removes it.	:-)##	NOTES:##	1) There must be one and not more than 1 default route!  Mainly because#	I can't see why you should have more than one.  And if there is more#	than one, we would have to box clever to find out which one is to be#	modified, or we would have to pass its identity as an argument.##	2) The script depends on Alexey Kuznetsov's ip utility from the#	iproute aka iproute2 package.##	3) No checking is done to see if the passed in IP address can#	reasonably be associated with the interface on which the default#	route exists.  So unless you want to deliberately spoof your source IP,#	check it!  Normally, I would expect that your haresources looks#	something like:##		nodename ip1 ip2 ... ipN IPsrcaddr::ipX##	where ipX is one of the ip1 to ipN.#prefix=@prefix@exec_prefix=@exec_prefix@. @sysconfdir@/ha.d/shellfuncsIPROUTE=@IP2UTIL@USAGE="usage: $0 ip-address {start|stop|status|monitor}";  CMDSHOW="$IPROUTE route show   to exact 0/0"CMDCHANGE="$IPROUTE route change to "usage() {	echo $USAGE >&2}errorexit() {	ha_log "ERROR: $*"	exit 1}##	We can distinguish 3 cases: no preferred source address, a#	preferred source address exists which matches that specified, and one#	exists but doesn't match that specified.  srca_read() returns 1,0,2#	respectively.##	The output of route show is something along the lines of:##		default via X.X.X.X dev eth1 src Y.Y.Y.Y##	where the src clause "src Y.Y.Y.Y" may or may not be presentWS="[`echo -en ' \t'`]"OCTET="[0-9]\{1,3\}"IPADDR="\($OCTET\.\)\{3\}$OCTET"SRCCLAUSE="src$WS$WS*\($IPADDR\)"MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)"srca_read() {	# Capture the default route - doublequotes prevent word splitting...	DEFROUTE="`$CMDSHOW`" || errorexit "command '$CMDSHOW' failed"	# ... so we can make sure there is only 1 default route	[ 1 -eq `echo "$DEFROUTE" | wc -l` ] || \		errorexit "more than 1 default route exists"	# But there might still be no default route	[ -z "$DEFROUTE" ] && errorexit "no default route exists"	# Sed out the source ip address if it exists	SRCIP=`echo $DEFROUTE | sed -n "s/$MATCHROUTE/\3/p"`	# and what remains after stripping out the source ip address clause	ROUTE_WO_SRC=`echo $DEFROUTE | sed "s/$MATCHROUTE/\1\5/"`	[ -z "$SRCIP" ] && return 1	[ $SRCIP = $1 ] && return 0	return 2}##	Add (or change if it already exists) the preferred source address#	The exit code should conform to LSB exit codes.#srca_start() {	srca_read $1	$CMDCHANGE $ROUTE_WO_SRC src $1 || \		errorexit "command '$CMDCHANGE $ROUTE_WO_SRC src $1' failed"}##	Remove (if it exists) the preferred source address.#	If one exists but it's not the same as the one specified, that's#	an error.  Maybe that's the wrong behaviour because if this fails#	then when IPaddr releases the associated interface (if there is one)#	your default route will also get dropped ;-(#	The exit code should conform to LSB exit codes.#srca_stop() {	srca_read $1	[ $? = 2 ] && errorexit "addresses don't match"	$CMDCHANGE $ROUTE_WO_SRC || \		errorexit "command '$CMDCHANGE $ROUTE_WO_SRC' failed"}##	The only difference between status and monitor is that the latter#	returns an appropriate exit code whereas status always returns 0.#	The return code should conform to LSB exit codes.#srca_status() {	srca_read $1	case $? in		0)	echo "OK"			return 0;;		1)	echo "No preferred source address defined"			return 3;;		2)	echo "Preferred source address has incorrect value"			return 4;;	esac}srca_monitor() {	srca_status $1}##	Add or remove the preferred source IP address to be used for packets#	originating on the localhost and leaving via the default route.#if	[ $# -ne 2 ]then	usage	exit 1ficase $2 in	start)		srca_start $1;;	stop)		srca_stop $1;;	status)		srca_status $1;;	monitor)	srca_monitor $1;;	*)			usage				exit 1				;;esac## Version 0.3  2002/11/04 17:00:00 John Sutton <john@scl.co.uk># Name changed from IPsrcroute to IPsrcaddr and now reports errors# using ha_log rather than on stderr.## Version 0.2  2002/11/02 17:00:00 John Sutton <john@scl.co.uk># Changed status output to "OK" to satisfy ResourceManager's# we_own_resource() function.## Version 0.1  2002/11/01 17:00:00 John Sutton <john@scl.co.uk># First effort but does the job?#

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -