I take it there're no rules on this list against sending
patches (and attempt to register at rcs.pfsense.org failed),
so here it goes. Just apply the patch to filter.inc
and edit /cf/conf/config.xml ) by adding something like
        <source-address>172.16.20.5</source-address>
in a nat rule and reboot
(or edit saved backup and restore edited version).

-- 
Tapani Tarvainen
*** filter.inc.ORIG	Mon Dec  7 05:12:36 2009
--- filter.inc	Fri Dec 18 12:43:28 2009
***************
*** 987,992 ****
--- 987,998 ----
  			else
  				$extaddr = get_current_wan_address($rule['interface']);
  
+ 			/* Source-NAT support */
+ 			if ($rule['source-address'])
+ 				$srcaddr = $rule['source-address'];
+ 			else
+ 				$srcaddr = "any";
+ 
  			if (!$rule['interface'] || ($rule['interface'] == "wan"))
  				$natif = $wanif;
  			else if($rule['interface'] == "pptp")
***************
*** 1053,1061 ****
  						case "tcp/udp":
  							if($natif) {
  								if($rule['external-port'] <> $rule['local-port'])
! 									$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from any to {$extaddr} port { {$extport[0]} } -> {$target}{$localport}";
  								else
! 									$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from any to {$extaddr} port { {$extport[0]} } -> {$target}";
  							}
  							break;
  						case "udp":
--- 1059,1067 ----
  						case "tcp/udp":
  							if($natif) {
  								if($rule['external-port'] <> $rule['local-port'])
! 									$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from {$srcaddr} to {$extaddr} port { {$extport[0]} } -> {$target}{$localport}";
  								else
! 									$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from {$srcaddr} to {$extaddr} port { {$extport[0]} } -> {$target}";
  							}
  							break;
  						case "udp":
***************
*** 1063,1094 ****
  							if($extport[0])
  								if($natif) {
  									if($rule['external-port'] <> $rule['local-port'])
! 										$natrules .= "rdr on $natif proto {$rule['protocol']} from any to {$extaddr} port { {$extport[0]} } -> {$target}{$localport}";
  									else
! 										$natrules .= "rdr on $natif proto {$rule['protocol']} from any to {$extaddr} port { {$extport[0]} } -> {$target}";
  								}
  							else
  								if($natif)
! 									$natrules .= "rdr on $natif proto {$rule['protocol']} from any to {$extaddr} -> {$target}{$localport}";
  							break;
  						default:
! 							$natrules .= "rdr on $natif proto {$rule['protocol']} from any to {$extaddr} -> {$target}";
  							break;
  					}
  				} else {
  					switch ($rule['protocol']) {
  						case "tcp/udp":
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from any to {$extaddr} port {$extport[0]}:{$extport[1]} -> {$target}{$localport}:*";
  							break;
  						case "udp":
  						case "tcp":
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto {$rule['protocol']} from any to {$extaddr} port {$extport[0]}:{$extport[1]} -> {$target}{$localport}:*";
  							break;
  						default:
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto {$rule['protocol']} from any to {$extaddr} -> {$target}";
  					}
  				}
  			}
--- 1069,1100 ----
  							if($extport[0])
  								if($natif) {
  									if($rule['external-port'] <> $rule['local-port'])
! 										$natrules .= "rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} port { {$extport[0]} } -> {$target}{$localport}";
  									else
! 										$natrules .= "rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} port { {$extport[0]} } -> {$target}";
  								}
  							else
  								if($natif)
! 									$natrules .= "rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} -> {$target}{$localport}";
  							break;
  						default:
! 							$natrules .= "rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} -> {$target}";
  							break;
  					}
  				} else {
  					switch ($rule['protocol']) {
  						case "tcp/udp":
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto { tcp udp } from {$srcaddr} to {$extaddr} port {$extport[0]}:{$extport[1]} -> {$target}{$localport}:*";
  							break;
  						case "udp":
  						case "tcp":
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} port {$extport[0]}:{$extport[1]} -> {$target}{$localport}:*";
  							break;
  						default:
  							if($natif)
! 								$natrules .= "{$nordr}rdr on $natif proto {$rule['protocol']} from {$srcaddr} to {$extaddr} -> {$target}";
  					}
  				}
  			}

---------------------------------------------------------------------
To unsubscribe, e-mail: support-unsubscr...@pfsense.com
For additional commands, e-mail: support-h...@pfsense.com

Commercial support available - https://portal.pfsense.org

Reply via email to