<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://kb.linuxvirtualserver.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeffbearer</id>
		<title>LVSKB - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://kb.linuxvirtualserver.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeffbearer"/>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki/Special:Contributions/Jeffbearer"/>
		<updated>2026-05-30T11:24:03Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4107</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4107"/>
				<updated>2007-06-20T20:50:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Monitoring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
I probably should not assume that everyone is using piranha, but that is the config I have so that is what I'll document. &lt;br /&gt;
&lt;br /&gt;
The lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====Monitoring====&lt;br /&gt;
You may notice I call a check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin].&lt;br /&gt;
&lt;br /&gt;
'''A Hangup with Red Hat Piranha'''  -- [https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243908 Fixed in 0.8.6.2]&lt;br /&gt;
&lt;br /&gt;
Another thing that is Red Hat Piranha Specific, but somebody here might run into it. This check_tftp script used with nanny, does not detect that a tftp server is not available, when the tftp client tries to time out it fails because the nanny process is blocking SIGALRM the signal that it uses on timeout.  I had to compile nanny without it blocking SIGALRM as I could not find a way in a shell script to unblock that signal.  Also nanny does not like when check_tftp returns with error codes. so I had to modify the script to always exit 0 instead of the different statuses it returns for Nagios.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
I conclude that I wish I had this wiki when I started figuring this one out.   I pieced this together with info from [http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html LVS-HOWTO services multi-port document].&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4106</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4106"/>
				<updated>2007-06-20T20:50:30Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Monitoring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
I probably should not assume that everyone is using piranha, but that is the config I have so that is what I'll document. &lt;br /&gt;
&lt;br /&gt;
The lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====Monitoring====&lt;br /&gt;
You may notice I call a check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin].&lt;br /&gt;
&lt;br /&gt;
'''A Hangup with Red Hat Piranha'''  -- [https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243908 Fixed in 0.8.6.2]&lt;br /&gt;
Another thing that is Red Hat Piranha Specific, but somebody here might run into it. This check_tftp script used with nanny, does not detect that a tftp server is not available, when the tftp client tries to time out it fails because the nanny process is blocking SIGALRM the signal that it uses on timeout.  I had to compile nanny without it blocking SIGALRM as I could not find a way in a shell script to unblock that signal.  Also nanny does not like when check_tftp returns with error codes. so I had to modify the script to always exit 0 instead of the different statuses it returns for Nagios.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
I conclude that I wish I had this wiki when I started figuring this one out.   I pieced this together with info from [http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html LVS-HOWTO services multi-port document].&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4098</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4098"/>
				<updated>2007-06-12T19:25:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* lvs.cf Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
I probably should not assume that everyone is using piranha, but that is the config I have so that is what I'll document. &lt;br /&gt;
&lt;br /&gt;
The lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
====Monitoring====&lt;br /&gt;
You may notice I call a check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin].&lt;br /&gt;
&lt;br /&gt;
'''A Hangup with Red Hat Piranha'''&lt;br /&gt;
Another thing that is Red Hat Piranha Specific, but somebody here might run into it. This check_tftp script used with nanny, does not detect that a tftp server is not available, when the tftp client tries to time out it fails because the nanny process is blocking SIGALRM the signal that it uses on timeout.  I had to compile nanny without it blocking SIGALRM as I could not find a way in a shell script to unblock that signal.  Also nanny does not like when check_tftp returns with error codes. so I had to modify the script to always exit 0 instead of the different statuses it returns for Nagios.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
I conclude that I wish I had this wiki when I started figuring this one out.   I pieced this together with info from [http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html LVS-HOWTO services multi-port document].&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4049</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4049"/>
				<updated>2007-06-08T16:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* lvs.cf Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
I probably should not assume that everyone is using piranha, but that is the config I have so that is what I'll document. &lt;br /&gt;
&lt;br /&gt;
The lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You may notice my check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin] and it works great.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
I conclude that I wish I had this wiki when I started figuring this one out.   I pieced this together with info from [http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html LVS-HOWTO services multi-port document].&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4048</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4048"/>
				<updated>2007-06-08T16:33:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
Then in the lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You may notice my check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin] and it works great.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
I conclude that I wish I had this wiki when I started figuring this one out.   I pieced this together with info from [http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services.multi-port.html LVS-HOWTO services multi-port document].&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4047</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4047"/>
				<updated>2007-06-08T16:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
This configuration is on a Direct Routing layout. but it should not matter much.&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
Then in the lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You may notice my check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin] and it works great.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4046</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4046"/>
				<updated>2007-06-08T16:31:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.  This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
Then in the lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You may notice my check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin] and it works great.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4045</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4045"/>
				<updated>2007-06-08T16:30:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.&lt;br /&gt;
&lt;br /&gt;
This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
===Adding Firewall Marks===&lt;br /&gt;
&lt;br /&gt;
In order to identify and group TFTP packets together use firewall marks.  iptables can add the marks to your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection, you will need to include them all.  This will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtual Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
Put those in an init script, or rc.local that runs on both of the LVS Directors.&lt;br /&gt;
&lt;br /&gt;
===lvs.cf Configuration===&lt;br /&gt;
&lt;br /&gt;
Then in the lvs.cf the config changes are simple, instead of the '''port''' option you use the '''fwmark''' option.  In my example I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You may notice my check_tftp script, I took the [http://mathias-kettner.de/download/check_tftp Nagios Plugin] and it works great.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Talk:Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4044</id>
		<title>Talk:Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Talk:Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4044"/>
				<updated>2007-06-08T16:23:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4043</id>
		<title>Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4043"/>
				<updated>2007-06-08T16:22:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
TFTP is a bit tricky because of how the protocol works.  The client sends Ack's to the same port from which the data came from the server.  This is problematic with a port based  LVS setup because the client ends up sending packets to the VIP on a port that it is not expecting packets.  The answer to this is to use firewall marks.&lt;br /&gt;
&lt;br /&gt;
TFTP Protocol:&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 69   (Request File)&lt;br /&gt;
# LVS:23456 -&amp;gt; Client: 12345 (Data)&lt;br /&gt;
# Client:12345 -&amp;gt; LVS: 23456 (Ack)&lt;br /&gt;
&lt;br /&gt;
And this is where the problem is, with a port based config, the LVS router doesn't know to listen on some random high port so the packet is dropped.  The Real Server is listening on that port, but the client doesn't know anything about the real server.&lt;br /&gt;
&lt;br /&gt;
This is where firewall marks come in to play, set up iptables rules on the lvs servers that mark all of your TFTP packets.  Since TFTP uses any unprivileged port it's kind of like the carpet bombing of port selection.  And this will limit you to making TFTP the only UDP service that uses unprivileged ports for that particular Virtural Service IP.&lt;br /&gt;
&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 69 -j MARK --set-mark 1&lt;br /&gt;
 iptables -t mangle -A PREROUTING -i eth0 -p udp -s 0.0.0.0/0 -d &amp;lt;VIRTUAL IP&amp;gt; --dport 1024:65535 -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
You will want to put those in an init script, or rc.local that runs on both of your LVS Directors.&lt;br /&gt;
&lt;br /&gt;
Then in the lvs.cf it's super simple, instead of the port option you use the fwmark option.  I left the port option for fun, but I think it's ignored.&lt;br /&gt;
&lt;br /&gt;
 virtual tftp {&lt;br /&gt;
     active = 1&lt;br /&gt;
     address = &amp;lt;VIRTUAL IP&amp;gt; eth0:1&lt;br /&gt;
     vip_nmask = 255.255.255.0&lt;br /&gt;
     fwmark = 1&lt;br /&gt;
     port = 69&lt;br /&gt;
     persistent = 45&lt;br /&gt;
     expect = &amp;quot;OK - answer from server&amp;quot;&lt;br /&gt;
     use_regex = 0&lt;br /&gt;
     send_program = &amp;quot;/usr/local/bin/check_tftp --connect %h&amp;quot;&lt;br /&gt;
     load_monitor = none&lt;br /&gt;
     scheduler = wlc&lt;br /&gt;
     protocol = udp&lt;br /&gt;
     timeout = 6&lt;br /&gt;
     reentry = 15&lt;br /&gt;
     quiesce_server = 1&lt;br /&gt;
     server ftp1 {&lt;br /&gt;
         address = 10.0.0.2&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
     server ftp2 {&lt;br /&gt;
         address = 10.0.0.3&lt;br /&gt;
         active = 1&lt;br /&gt;
         weight = 1&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
You can get the check_tftp script from the nagios plugins.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{lvs-example-stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:LVS Examples|TFTP]]&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	<entry>
		<id>http://kb.linuxvirtualserver.org/wiki?title=Talk:Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4042</id>
		<title>Talk:Building Scalable TFTP Cluster using LVS</title>
		<link rel="alternate" type="text/html" href="http://kb.linuxvirtualserver.org/wiki?title=Talk:Building_Scalable_TFTP_Cluster_using_LVS&amp;diff=4042"/>
				<updated>2007-06-08T14:56:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jeffbearer: New page: I'm sad to see that this page is blank,  I'm trying to figure this one out at the moment and there is a bit of a problem with how the protocol works.  I'm using direct routing.  #Client Re...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm sad to see that this page is blank,  I'm trying to figure this one out at the moment and there is a bit of a problem with how the protocol works.  I'm using direct routing.&lt;br /&gt;
&lt;br /&gt;
#Client Requests the file from the LVS '''Client:12345 &amp;gt; LVS:69'''&lt;br /&gt;
#Packet Forwarded from LVS to Real Server&lt;br /&gt;
#Real Server Retuns first Data Packet '''LVS:23456 &amp;gt; Client:12345'''&lt;br /&gt;
#Client sends ACK to LVS on the port the data came from. '''Client:12345 &amp;gt; LVS:23456&lt;br /&gt;
&lt;br /&gt;
The problem here is that port 23456 is not open on the LVS only on the real server.&lt;br /&gt;
&lt;br /&gt;
I tried some iptables source address mangling so that step 3  looks like '''Real Server:23456 &amp;gt; Client:12345'''&lt;br /&gt;
but it does not matter, in step 4 the client still sends the ACK to LVS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'm out of ideas on how to make TFTP work with LVS so any input would be appreciated.&lt;/div&gt;</summary>
		<author><name>Jeffbearer</name></author>	</entry>

	</feed>