diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb
index 4c9c24be15569ed37f598c177099b2de02801978..c5e87a7ba2d648c90f864a0f3b3aec2569d9d077 100755
--- a/src/ruby/bin/interop/interop_client.rb
+++ b/src/ruby/bin/interop/interop_client.rb
@@ -69,12 +69,12 @@ def test_creds
 end
 
 # creates a test stub that accesses host:port securely.
-def create_stub(host, port, is_secure)
+def create_stub(host, port, is_secure, host_override)
   address = "#{host}:#{port}"
   if is_secure
     stub_opts = {
       :creds => test_creds,
-      GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.com'
+      GRPC::Core::Channel::SSL_TARGET => host_override
     }
     logger.info("... connecting securely to #{address}")
     Grpc::Testing::TestService::Stub.new(address, **stub_opts)
@@ -212,6 +212,7 @@ def parse_options
   options = {
     'secure' => false,
     'server_host' => nil,
+    'server_host_override' => nil,
     'server_port' => nil,
     'test_case' => nil
   }
@@ -220,6 +221,10 @@ def parse_options
     opts.on('--server_host SERVER_HOST', 'server hostname') do |v|
       options['server_host'] = v
     end
+    opts.on('--server_host_override HOST_OVERRIDE',
+            'override host via a HTTP header') do |v|
+      options['server_host_override'] = v
+    end
     opts.on('--server_port SERVER_PORT', 'server port') do |v|
       options['server_port'] = v
     end
@@ -240,12 +245,16 @@ def parse_options
       fail(OptionParser::MissingArgument, "please specify --#{arg}")
     end
   end
+  if options['server_host_override'].nil?
+    options['server_host_override'] = options['server_host']
+  end
   options
 end
 
 def main
   opts = parse_options
-  stub = create_stub(opts['server_host'], opts['server_port'], opts['secure'])
+  stub = create_stub(opts['server_host'], opts['server_port'], opts['secure'],
+                     opts['server_host_override'])
   NamedTests.new(stub).method(opts['test_case']).call
 end